Transcript: HTMX
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörer und Hörer, willkommen beim Python-Podcast Episode 38.
Dieses Mal wollen wir etwas über HTMLX sprechen.
Hier ist der Dominik, bei mir ist wieder der Jochen.
Ja, hallihallo, willkommen Dominik.
Und wir haben heute einen neuen Gast, und zwar den Thomas. Hi Thomas.
Hallo, grüß dich.
Jo, hallihallo.
Schön, dass du da bist.
Ja, fangen wir wie immer an mit ein bisschen News aus der Szene.
Ja, oder vielleicht kann sich Thomas kurz vorstellen.
Das wollte ich dann bei HTMLX machen, aber weißt du was, du hast recht.
Eigentlich müssten wir das am Anfang stellen und sagen, Leute, hallo, und man weiß gar nicht, wer das ist.
Deswegen sag doch mal, Thomas, was machst du denn?
Ja, ich mache Softwareentwicklung. Das schon eine ganze Menge Jahre. Habe vor 20 Jahren mal Informatik studiert und vorher schon auch als Kind daran Spaß gehabt. Und ja, mache hauptsächlich eben Webentwicklung mit Python und Django, PostgreSQL und eben seit neuestem auch mit HTMX.
Und ja, Jochen hat mich mal angesprochen, wollen wir nicht einen Podcast machen? Dachte ich, ja, schön, bin ich dabei. Und ja, jetzt bin ich hier.
Sehr schön. Ja, sehr cool.
Ja, okay
Dann geben wir ein bisschen News über
Erstmal ein bisschen News, ja
Ich glaube, ich habe
fast gar nichts aufgeschrieben, oh doch
Python 3.6 ist draußen
End of Life, ich glaube es war am 23.
Dezember oder so
Weihnachtsgeschenk, eure Version ist duplicated
Ja, das heißt
quasi die erste
Version Python 3, wo
viele Leute irgendwie
das Gefühl hatten, das ist jetzt besser als Python 2.
Ist jetzt auch
End of Life. Das heißt, ja, also
krass. Als ich das gesehen habe,
dachte ich so, wow, das ist schon wieder so lange her.
Ich glaube, bei 3.6 habe ich angefangen.
Das ist schon gar nicht so lange her.
3.7 kam dann relativ fix und
ging schnell.
Also meine News, ich habe noch gelesen, dass Python
Programmiersprache des Jahres 21 geworden ist.
Yay! Wir werden
famous und berühmt.
Ganz wichtige News.
Ja, es gab jetzt auch wieder eine neue Version
von diesem TOB-Index,
wo Python auf Platz 1 ist.
Allerdings
muss man dazu sagen,
so wahnsinnig viel
kann man da nicht daraus lesen.
Ja, ist doch eigentlich relativ wurscht.
Ich habe letztens, wo habe ich das gehört?
Ein programmierbarer Podcast war es, glaube ich.
Dass da jemand meinte, das ist eine
niederländische Firma und das, was sie machen, ist,
sie machen irgendwie
neben den Namen der Programmiersprache
Programming dahinter und
googeln dann danach und dann zählen sie
die Anzahl der Suchergebnisse.
Das ist mehr oder weniger, was sie tun.
Und das ist natürlich irgendwie, ja, gut,
ob das jetzt so einem wahnsinnig viel sagt, ist halt
unklar.
Das habe ich von dir noch nicht gehört.
Ja, ich
höre immer so, was es an anderen Podcasts
auch so gibt. Ja, deswegen, vielleicht ist das doch mal
interessant, dass man mal kurz darüber erzählt.
Ja, also, da geht es meistens
so um Frontend-Themen. Also es gibt erstaunlich,
das ist auch sowas, das finde ich immer ein bisschen komisch,
dass es, also es gibt einige
ja, Podcasts,
sich mit dem Thema Programmierung und so beschäftigen,
aber fast alle eher so
Frontend. Also es gibt zum Beispiel
Webwork, äh, nee, nicht Webwork.
Working Draft
heißt einer.
Auch einer der, vielleicht der älteste
Webentwicklungspodcast
und sicherlich einer der bekanntesten.
Auch mit Leuten hier aus
Düsseldorf und
ja, das ist aber auch sehr Frontend-lastig.
Und
genau, programmierbar
ist relativ neu.
ist halt auch sehr frontend lastig.
Folge 116.
Die machen häufig Dinge, ja, aber
achso, vielleicht auch nicht so neu.
Ja, aber gut, auf den Moment werde ich ja gerade sehen.
3. November, 2. November, 10. November, 12. November,
17. November, 24. November.
Also ja, die Pay ist relativ häufig.
Ja, Working Draft hat
irgendwie über 500, 531 sind sie jetzt
irgendwie oder so.
Und die machen einmal die Woche.
Da hast du schon.
Ja, da brauchen wir noch ein bisschen.
Wie sagt jemand mit dem Gameboy,
kann man jetzt in 50.000 Jahren einen Bitcoin
meinen. Ah ja,
okay. Irgendwie so, die
Zahl ist jetzt auch rein aus der Luft.
Ja, und dann gibt es, also was ich auch
manchmal noch höre, ist sowas, also wenn es
deutschsprachige Geschichten sind, Englischsprache gibt es natürlich
endlos jede Menge, aber es gibt noch
sowas wie Softwarearchitektur im Stream.
Höre ich
manchmal.
Und
InnoQ hat ein paar Podcasts,
das ist eine Firma und die hat auch was mit dem, also der
Mensch, der
Software-Aspektoren im Stream macht, der arbeitet da auch.
Jeder hat Wohl.
Und da arbeitet auch jemand, also der
Stefan Tilkoff arbeitet da auch und der
ist auch viel in anderen Podcasts unterwegs. Da habe ich auch
einen Working Graph zum Beispiel.
Mal ein sehr schöner, auch passend zum Thema,
worüber wir gleich reden wollen. Da gibt es eine Episode
zum Thema Single-Page-Apps und
was ist eigentlich REST und so und die ist sehr empfehlenswert.
Oh ja, was eigentlich REST ist, darüber wollen wir auch gleich sprechen
Ja, genau, darüber haben wir auch schon mal
eine Episode gemacht
Ja, aber also so in dem
also ganz kurz muss man es ja gleich wieder erwähnen
weil es ja so ein bisschen heute auch darum geht
Ja, stimmt, dann gibt es
noch, wo wir sind, ist vorne
das ist eigentlich ein sehr super
produziertes Ding, der Titel ist toll
Ja, der Titel ist toll und die Grafiken
sind toll und das sieht alles toll aus
die Website ist toll, aber ja, es ist halt auch ein sehr vorne
entlastiger Ding, die machen halt
auf Streams und ja.
Genau. Und ich
meine, das sind so fast, dann gibt es noch
so ein paar KI-Geschichten.
Die höre ich, da habe ich die Namen jetzt nicht.
Und die höre ich auch sehr unregelmäßig, weil meistens gefällt mir
das gar nicht so gut. Oh, aber das mit dem
Season 4 sieht gut aus. KI in der Industrie, glaube ich,
ist einer. Das gefällt mir echt ganz gut, da bin ich gespannt.
Ja. Ansonsten mehr fällt mir jetzt
ehrlich gesagt nicht ein, was es da auf Deutsch gibt.
Ja. Fällt dir noch was ein,
Thomas, dazu?
Du hast gar nicht so viel Podcasts erzählt
Nö, meine Überlegung gerade war bloß, ob es
im DevOps-Bereich über Kubernetes
oder irgend sowas, also im deutschsprachigen
Raum noch was gibt
Naja, keine Ahnung
Vielleicht gibt es was, aber das ist auch etwas, wo ich
gar nicht nachgucken würde oder weil es mich
gar nicht so sehr interessiert
da glaube ich, würde ich das auch gar nicht mitbekommen
Niko hatte glaube ich so ein, zwei Sachen
für den Niko natürlich
Aber der hat auch schon ein halbes Jahr nicht mehr
neue Folgen released, also weiß ich nicht
von dem habe ich letztens gehört,
da macht er irgendwie so ein Live-Webinar-Ding,
Stream, auch eher so Richtung Stream geht das.
Okay, okay.
Aber ja, stimmt, der macht natürlich,
also Tech-Thiefen, vorher hieß das irgendwie anders,
ja, der macht auch nicht nur
Frontend-Themen, sondern alles Mögliche,
auch so ein bisschen mit Schwerpunkt auf Data Science, aber
ja.
Cool, ja.
Ja, ansonsten weiß ich nicht, gab es in der Python-Welt
irgendwelche Neuigkeiten,
irgendwelche interessanten Dinge?
sonst.
War ja so
Jahrespause, ne?
Ja, Jahreswechsel ist immer ein bisschen ruhiger.
Ja, nö.
Ansonsten weiß ich da auch nichts mehr.
Dann können wir
fast mit dem Thema
nicht früh durch.
Und wie wir ja schon angekündigt
hatten, angedroht, gibt es
nun auch ein bisschen Werbung.
Der Sponsor für diese Episode
ist NordVPN.
Das ist ein VPN-Anbieter
und da könnt ihr etwa auf
vpn.com slash pythonpodcast gehen
und bekommt da 73% Rabatt
auf ein 2-Jahres-Paket
und noch einen Gratis-Monat extra
und genau, wenn euch
das nicht zusagen sollte, könnt ihr das auch
innerhalb von 30 Tagen kündigen
ohne, dass euch da Zusatzkosten entstehen
und ja, könnt euch das mal angucken
ist vielleicht ganz nett, manchmal braucht man das ja schon
also ich war zum Beispiel letztens
im Urlaub und
und wollte da die Dinge weitergucken, die ich normalerweise so gucke und musste dann feststellen,
nee, das geht nicht, weil Streaming-Dienstleister hat festgestellt, man ist woanders, als man normalerweise ist
und dann geht das halt nicht mehr.
Und da möchte man dann vielleicht doch eher nur so auf irgendwo VPN aktivieren klicken
und dann geht das halt einfach weiter.
Und hatte ich nicht, muss ich überlegen, wie ich das nicht vielleicht mal haben möchte für den Fall.
und ja,
auch wenn ihr einen
lokalen Internet-Service-Provider habt, der
vielleicht nicht so auf der Höhe ist, was seine
Peerings angeht, dann könnt ihr da euch
zu einem besseren Internet-Erlebnis
verhelfen, indem ihr einen VPN benutzt.
Ja, genau.
Und wenn ihr das mal ausprobieren möchtet, einfach auf
nordVPN.com slash pythonpodcast gehen
und ja, ausprobieren.
Vielen Dank an NordVPN
für die Unterstützung.
Und dann geht es direkt in das Thema rein.
HTMX.
Was ist denn das?
Oh, das weiß ich auch nicht so genau.
Das sind die High-Power-Codes für HTML.
So hat es denn der Mensch genannt,
der das erfunden hat.
Um einfach
HTML so zu erweitern,
wie es der Standard bis jetzt nicht zugelassen hat.
Also, dass man keinen
JavaScript mehr braucht, um coole,
responsivee Sachen im Web zu bauen.
Na doch, JavaScript brauchst du schon.
Ja, aber du musst das nicht mehr
schreiben, so wirklich.
Ja.
Ja, es wird dann so deklarativ.
Das ist eigentlich schon
nicht schlecht. Es entwickelt sich ja alles so ein bisschen
in die Richtung spricht.
Ja, vielleicht noch mal ganz kurz,
was das so ist.
Wie machen
wir denn normalerweise jetzt Frontend und Backend?
Trennen wir das? Wie war das denn früher?
Und
warum dann HTMX?
Also was ist das so?
Früher war es einfach nur so, du hast den Server gefragt
und der hat dir dann die Webseite fertig geschickt.
Ja...
Nein, weil ganz früher...
Wie früh hättest du es denn gehabt?
Anfang der 90er oder so.
Also ich würde ja sagen,
das Web ist ja im Grunde ein sehr neues
Modell. Also insofern,
fangen wir gerade mit dem
harten theoretischen Kram an.
Ich weiß nicht, ob das ein guter Einstieg ist, aber...
Ich weiß nicht.
Naja, also Web ist ja eigentlich revolutionär
in vielen
Eigenschaften, die es so hat. Und halt ganz
anders als irgendwie die Dinge, die man vorgemacht hat.
vorher, was man vorher gemacht hat, ist halt so
Client-Server zum Beispiel.
Oder Remote-Procedure-Calls
oder sowas. Solche Dinge.
Das ist halt alles deutlich älter als das Web.
Und Web ist halt eigentlich was anderes.
Aber ich glaube, die Geschichte erzählen wir gleich.
Und dann, was ist denn Web?
Dann erzähl doch erstmal, was denn Web ist.
Ja, naja, also Web
ist halt sozusagen
da, ja,
wie definiert man das?
Es gibt halt diese, das hatten wir, wie gesagt,
in der Rest-Episode, diese Dissertation von
Roy Fielding, der halt auch an Startnards da maßgeblich mitgearbeitet hat mit Tim Berners-Lee und der hat da seine Dissertation irgendwann drüber geschrieben und da definiert er, was er quasi meint, was das ist, so als Representational State Transfer oder so. Aber es ist halt die Frage, ob das so interessant ist.
Ja, ich glaube, das hatten wir ja schon in der Restepisode. Ich glaube, da müssen wir es gar nicht sagen.
Ja, im Grunde so ganz, ganz, ganz grob ist es halt irgendwie, es geht darum, dass der Client im Grunde nicht mehr viel wissen muss, dass man halt alles, was an Informationen man braucht, um halt irgendwie einen Client betreiben zu können, ja sozusagen, dass das halt alles mitkommt.
also sozusagen, dass man halt auch mit einem alten Browser
halt zum Beispiel Dinge machen kann, dass man
jetzt nicht immer den neuesten Browser haben muss, also
bei kleinen Server war das Problem früher immer,
wenn man da irgendwie was geändert
hat, dann muss man immer dafür sorgen, dass
auch die aktuellste Version vom
Client irgendwie geschippt wird, weil
ansonsten funktioniert das halt nicht mehr.
Und das ist mit Web,
also mit REST und Web ist es eigentlich
dann insofern besser, als
es halt auch mit alten Browsern noch funktioniert, man muss sich nicht
darum kümmern, dass die Leute halt immer
den aktuellsten Browser haben und
und es sollte eigentlich mit jedem Browser funktionieren und so.
Und der Browser muss nicht wissen, was da kommt.
Also wenn ich jetzt zum Beispiel, das ist halt genau eine von diesen Geschichten,
die halt jetzt bei diesen ganz modernen Geschichten in Anführungsstrichen,
also dieses Single-Page-App-mäßigen Teilen, halt wieder so ist wie ganz, ganz früher.
Jetzt hast du wieder was gesagt, das Single-Page-App-Teil.
Und ich glaube, das müsste so ein bisschen strukturierter sein.
Ich glaube, wir sind ja gerade schon wieder sehr in der Historie drin.
Ja, du hast danach gefragt.
Ja, ja, ich habe ja gesagt, wir müssen das auf jeden Fall später auch nochmal erzählen.
gerade was kein Server ist, aber der
glaube ich der entscheidende Unterschied, was HTMLX
halt macht, diesen modernen Trend,
dass man halt eine Single-Page-Application braucht,
um Frontend schön darzustellen,
ersetzen kann und zwar mit
Auslieferung vom Backend, also so Servers halt dann.
Aber vielleicht will der Thomas das
gerade genau da jetzt nochmal einsteigen.
Ja, also
bei HTMLX, das ist
sicherlich auf JavaScript basiert, anders
kommt man ja in den Browser nicht wirklich
rein, um dort irgendwas
zu programmieren im Browser.
aber Ziel der Übung ist eigentlich, dass der Endanwender, also der Entwickler dann kein JavaScript mehr schreibt oder wenig JavaScript und da wird HTML erweitert um neue Attribute, sodass man das HTML klassisch verwenden kann, also wie es eben vor 20 Jahren gemacht wurde, sprich vom Server zum Client kommt HTML, gegebenenfalls auch HTML Schnipsel oder so ähnliches
und man braucht das jetzt nicht in ein JSON-Format erstmal konvertieren
und dann am Client wieder aus dem JSON dann irgendwie HTML machen oder DOM-Objekte machen.
Das ist eben so recht revolutionär eigentlich.
Revolutionär so hingegen, weil es halt wie das Wort Revolutionär ist,
am Ende wird zurückgewälzt auf den Status, wo wir eben vom Server zum Client HTML geschickt haben
und geht dann da sozusagen einen anderen Weg.
Und mir persönlich hat es sehr gut gefallen, dass man dann sagt,
man hat eben eine übliche HTML-Seite und kann dann kleine Schnipselchen
eben interaktiver und ähnliches gestalten und muss sich
das nicht so komplizierte Frameworks ranziehen
wie React oder Vue. Das kann man mit einfachen Mitteln
eine ganze Menge erreichen und das fand ich ganz cool, habe es mal ausprobiert in einem kleinen Projekt.
und da bin ich jetzt hier, um ein bisschen davon zu erzählen.
Ja, ich finde es super spannend.
Ich höre ja schon seit einiger Zeit davon.
Wenn man sich anguckt, was sind die meistgesehenen Talks auf sowas wie,
das ist auch der Grund, auf den Thomas gekommen ist,
bei DjangoCon EU oder DjangoCon US, das ist halt HTMX, das ist halt ganz heiß.
Ja, ich kann es auch sehr gut verstehen.
also ich habe irgendwann mal angefangen mich auch mit
diesen sozusagen
Frontend Frameworks so ein bisschen zu beschäftigen
für mich war damals der Grund, warum ich das gemacht habe
dass ich gerne so
ja
so ein
UI
Anmutung gerne hätte, wie bei
einer nativen
Applikation sozusagen
das hat man ja halt so früher eigentlich bei Webseiten
nicht so wirklich gehabt, weil
naja, da
hat man immer
Request-Response-Cycle
irgendwie und das dauert dann halt einfach
und man sieht das auf jeden Fall, dass da was passiert und es ist halt
nicht so schnell, als wenn man jetzt halt irgendwie
eine
in Anführungsstrichen klassische App hat,
die halt irgendwie lokal auf dem Rechner läuft
und
für mich war das halt so,
das Versprechen dieser
quasi Frameworks, dass man das halt
auch im Browser so hinkriegen kann, dass man da
keine Latenz mehr hat und dass das halt alles
super schnell ist und dass sich das anfühlt
wie was natives.
und das hatte mich interessiert und da dachte ich,
okay, naja gut, wenn man das halt so
machen muss, dann geht das halt nicht anders und
dann muss ich halt dieses komische JavaScript
da mitmachen. Okay,
aber wenn ich dafür diese
UI-Geschichte
kriege, dann ist es das ja vielleicht
wert, weil das ist ja tatsächlich
so ein bisschen so eine nervige Geschichte.
Und ja,
ich dachte eigentlich immer, der Grund, warum
das bei normalen Web-Anwendungen
halt so ein, oder bei Webseiten
so ein Problem ist, lag an diesem Request-Response,
weil es dauert halt irgendwie, je nachdem wo ein Server
steht, hat man alleine eine Latenz
bei einem Request von, weiß ich nicht,
mindestens mal so 50 Millisekunden oder sowas
und ich dachte, das liegt dann halt, das
führt dann schon dazu, dass man das irgendwie dann,
dass sich das dann langsam anfühlt und
hab dann sogar solche Sachen eingebaut
in meine ersten Versuche mit so
diesen, also ich glaube, das erste
hab ich tatsächlich React irgendwie am Anfang
verwendet und
hab dann immer irgendwie die
Daten für, so, ich hatte
so eine Liste von Dingen, wo ich
Pagination hatte und dann habe ich die Daten
für die nächsten, immer für die paar Seiten außenrum
immer schon gleich mitgeflatscht,
damit ich die nicht holen muss, weil ich dachte, wenn ich da auf
einen
sozusagen Link in Anführungsstrichen klicke
und dann müssen Daten geholt werden, dann dauert das ja
wieder lange und das will ich ja gar nicht, sondern ich will, dass das sofort
da ist. Genau.
Und tatsächlich
das habe ich jetzt auch
mit HTMLX ein bisschen rumgespielt oder so
und da habe ich gemerkt, oh, das ist gar nicht der Punkt, das ist halt
schnell genug. Also wenn das 50 Millisekunden
dauert, dann reicht das vollkommen aus, dass
sich das halt schnell anfühlt.
Also vielleicht hast du
zu viele Daten dann sonst am Kleinen drin, die der
dann handeln muss?
Nö, nö. Das ist einfach, also meine Vorstellung,
dass das halt daran liegt, dass die Langsamkeit
von dem Netzwerk festkommt, war so
nicht ganz korrekt.
An der Interaktivität?
Das liegt daran, dass
das komplette Browserfenster immer ausgetauscht wird.
Das ist halt der Punkt. Und dass der
Browser teilweise auch bei komplizierteren
halt einfach lange braucht, um das
wieder komplett neu zu rendern.
Ja, aber das Ganze rendern, solange dauert.
Was ich ganz interessant fand von dem, was der Thomas gerade gesagt hat, war, dass er
sagte, man muss das erst in
JSON umwandeln von dem alten Zustand,
damit man es wieder zurückdrehen kann.
Das heißt, so der Urzustand
ist halt ein anderer dann gewesen als JSON.
Was ich jetzt, muss ich sagen, weil ich bin auch nicht so lange
dabei wie ihr, gar nicht
so unintuitiv finde, weil ich zum Beispiel jetzt aus
Django Models immer direkt in JSON reinrendere oder so
und halt diesen Umweg über die Templates
gar nicht so häufig gehen musste.
Deswegen ist das für mich so ein bisschen
Umgewöhnung, also ich finde das Django-Template-System sehr
angenehm, weil es halt die ganzen
Features von Django zurückholt,
die man sonst verliert, wenn man halt Js macht,
aber ansonsten hat es für mich
auch so einen Sinn, wenn man halt irgendwie diese serialisierten
Objekte durch die Gegend schicken kann.
Und deswegen, also was meintest du denn damit,
wenn du sagst, dass wir zurückdrehen, also was wäre für dich
denn so die... Also zurückdrehen, das war
eher so zeitlich gemeint, also dass
man eben so
ähnlich macht, wie man es vor
und Jochen unterhalten sich über die Programmiersprache Python
und Jochen unterhalten sich über die Programmiersprache Python
ficken.
Ja, und das
habe ich bei so einem kleinen
oder zwei kleinen Projekten ausprobiert und
funktioniert prima
und
kann bloß sagen, dass es auch eine ganze Menge
anderer Leute eben sozusagen auch sehen,
die gerade halt Leute, die aus dem
eher Backend-Sprachen kommen,
die eben Python oder
Ruby oder irgendwas anderes programmieren,
die haben halt in dem Bereich
eben Spaß dran, weil sie dann in ihrer
gewohnten Programmierumgebung bleiben
können und brauchen jetzt nicht
da sich diesen großen
JavaScript-Stack
anzutun. Sicherlich, das HTML
selber ist auch in JavaScript geschrieben, aber
das heißt jetzt ja nicht bloß, dass
man dann mit JavaScript
schreiben muss. Man kann es einfach, weil es rein
deklarativ ist und das finde ich halt sehr schön.
Es gibt ein paar Attribute, mit denen
man das HTML erweitern kann und dann
kann man eben auch einzelne Bereiche
auf so einer Seite austauschen.
Man hat also eine große Seite und dann kann man eben
drei, vier Bereiche haben
und dann kann man in diesen Bereichen
Interaktivität schaffen, indem man dort
einen Button hat und dann tut sich aber halt auch bloß nur
dieser kleine Bereich austauschen.
Und das macht halt die Seite
irgendwie, ja,
intern interaktiv.
Ja, ja, das was ich jetzt, ich hab
gestern, vorgestern mal so ein bisschen
damit rumgespielt
und was ich, ich hab
mein altes, meinen alten Use Case
mir nochmal quasi
versucht damit umzusetzen und das ist halt
gar nicht so einen kleinen Teil austauschen, sondern
quasi so den Hauptcontent
auf einer Seite. Also man kann quasi eine
Liste von Dingen und zum Beispiel wie
bei einem Podcast so die Episoden
oder bei einem Blog die Artikel und jetzt
paginated man da so durch
und das hat
für mich war der Grund früher mal, warum
ich gedacht habe, okay, ich muss mir das mal
angucken mit den JavaScript-Frameworks, dass das halt
dann schneller geht, wenn man das halt irgendwie
schon, wenn man da nicht jedes Mal
die Seite neu laden muss.
Und das habe ich jetzt mit HTMLX gemacht und auch selbst
wenn man den kompletten Content der
auszutauschen. Es ist immer noch sauschnell und man
spürt da keinen Unterschied.
Oder man hat nicht das Gefühl,
dass man den
kompletten Content ausgetauscht hat, sondern
erst wenn man tatsächlich die komplette
Seite austauscht, dann wird es langsam.
Also Lizenz hast du 100 Millisekunden, merkst du
halt, ein bisschen unter, so unter 50
oder ist schon super. Da merkt man das eigentlich nicht und
das kann man durchaus schaffen, da drunter zu bleiben.
Und das ist natürlich dann, und da dachte ich so, als ich das
gemerkt habe, okay, dieser Use-Kit geht auch
damit, dachte ich so, wow, okay.
Dann entfällt für mich
eigentlich der Grund für diese JavaScript-Dinge
Also was mich interessieren würde
was ich jetzt noch nicht genau gesehen habe
aber es liegt wahrscheinlich daran, dass ich das noch nicht so eingebaut habe
Kann ich das trotzdem so in Komponenten strukturieren
wie ich mir das vorstelle aus dem Vue.js raus
und wie läuft das mit den ganzen
netten
Animation-Plugins und sowas
muss ich das dann kleinteilig einbauen
vom Server, hängt das dann drüber
und wie werden die Sachen da wieder reingerendert
das habe ich immer noch nicht so ganz begriffen
weil also VDS rendert das ja auch irgendwie im Hintergrund einmal durch
und tauscht dann die Teile aus im DOM.
Und auf welcher Ebene muss ich das denn machen?
Ja, man hat ja die ganz normalen HTML-Tags.
Also wenn du eine Seite hast und da sind eben drei interaktive Bereiche drin,
dann wäre es eigentlich sinnvoll, du machst eine große Seite
und dann hat die da dreimal ein Form-Tag zum Beispiel.
und wenn du ein Submit für dieses Form macht, also für eins dieser Forms,
dann werden die Daten dieses einzelnen,
des einen Forms zum Server geschickt und kriegst die Antwort wieder zurück.
Also dann, die Komponenten sind sozusagen
HTML-Tags.
Ja, also wenn du meinst, dass du sowas hast, also eben
Vue und React, die machen das, da ist ja genau das,
das ist ja ein ganz anderes Modell und wahlweise, je nachdem aus welcher Geschichte
und Jochen unterhalten sich über die Programmiersprache Python
und so. Aber genau an der Stelle
müssen wir jetzt vielleicht nochmal einiges hochgehen, weil ich glaube,
jetzt haben wir ein bisschen die kleine Einleitung gemacht, aber
das wäre jetzt genau nochmal interessant zu wissen,
was ist denn jetzt genau der Unterschied zwischen
RPC und
Client-Server und...
Naja, also auch der Unterschied sozusagen
zwischen JSON und HTML,
also ich muss
auch sagen, ich finde JSON
ehrlich gesagt so als Entwickler
viel angenehmer, um damit zu arbeiten,
als jetzt sowas wie XML oder
HTML oder sowas.
oder überhaupt Markup Languages
einfach deswegen, weil JSON
halt viel einfacher ist,
zum Beispiel, also einer der wesentlichen Unterschiede,
das ist ein bisschen subtil, aber tatsächlich ist es halt das,
was einem dann so extrem
auf die Füße fallen kann oder
was halt sehr viel Aufwand erzeugt, ist halt
XML oder HTML
ist halt ein Dokumentformat.
Es ist halt nicht so, dass das einfach nur Daten sind.
Und das Gute ist natürlich auch,
als Backend-Entwickler kann man natürlich sagen,
wenn man sich mit dem Pixel-Schubschrauber beschäftigt,
sichert sich Frontend damit. Man gibt denen einfach die Daten
und dann ist gut, dann hat man damit nichts mehr zu tun.
Das heißt, es gibt ja auch diese Zweigattung von Entwicklern.
Das führt halt auch dazu,
dass es halt nicht so mächtig
ist in gewisser Weise. Also der Hauptunterschied
zwischen Dokument und Daten
ist halt zum Beispiel die Reihenfolge.
Du hast halt in einem Dokument
eine Reihenfolge von Dingen.
Da spielt es eine Rolle, ob Sachen vorne stehen oder hinten.
Wenn ich in JSON
ein Objekt habe, dann ist das egal,
ob das vorne steht oder hinten.
Das sind immer die gleichen Daten.
und ja, das
macht es sehr schwer zu handeln, weil
ich dann beim Parseln halt aufpassen muss und so,
aber auf der anderen Seite macht es halt auch
sehr mächtig. Ich kann halt auch
ja, also
die Dinge quasi, die ich da anzeigen
möchte, direkt drin beschreiben. Das kann ich so in JSON
ja nicht machen, aber in HTML kann ich das.
Also in HTML kann ich
halt ein Formular hinschreiben, das halt irgendwie
einen Kontakt
zum Beispiel anzeigt oder halt mir anzeigt,
wie ich den ändern kann, ohne dass
dazu sonst irgendwas wissen muss.
Du kannst ja tatsächlich auch den ganzen Datentyp verändern.
Du musst ja jetzt nicht nur irgendwie ein JSON-Objekt durch ein anderes
austauschen, sondern du kannst ja was ganz anderes
dahin stellen auf einmal.
Das ist ja so magisch irgendwie.
Ja genau, und bei JSON geht das halt nicht.
Bei JSON musst du halt wissen, was das ist.
Ansonsten funktioniert es nicht.
Was mir bei JSON jetzt nicht so gefällt,
ist halt, die Datentypen
sind recht eingeschränkt.
Ordentliches
Timedelta oder irgendwas.
Ja.
und Python und dann will ich aus dem SQL irgendwie das beim Client anzeigen und da ist es f mich relativ klar wenn ich sage ich mache aus dem SQL
mache ich HTML und das schicke ich zum Browser.
Das ist relativ einfach.
Also wenn ich da erstmal aus dem SQL JSON mache und dann mache ich aus dem JSON HTML,
ist es einfach ein Schritt mehr.
Und da frage ich mich, warum?
Ja und
es ist halt auch so, dass man dann die ganzen
Probleme aus der alten Welt wiederbekommt
nämlich zum Beispiel, was ist wie
also deine Applikation
muss jetzt natürlich das JSON verstehen
und hat jetzt auch
Versionen zum Beispiel, also was ist denn
wenn jetzt kommt das JSON
von heute sozusagen
aus irgendeinem Backend, aus irgendeiner Datenbank
und die Applikation ist aber ein Jahr alt
weil ich halt jetzt, weiß ich nicht, keine Ahnung
ein Browserfenster irgendwie
Ich habe einen Rechner irgendwie in die Ecke gelegt, der dann ein Jahr lang gelegen hat, jetzt kreufe ich den wieder auf und was macht die Applikation denn jetzt mit den Daten?
Das wird wahrscheinlich nicht funktionieren.
Das haut nicht hin und das hat man ja auch eigentlich in allen von diesen frontendlastigen Anwendungen, dass dann ab und zu irgendwo so ein Popup kommt, bitte Seite neu laden, weil neue Software-Update oder irgendwas anderes, so ein Browser-Reload dann sozusagen wie so ein Software-Update.
Genau, das hat man in dem
HTMLX-Fall eigentlich
Ja, das hat man in dem
Rest-Web irgendwie sozusagen
Fall, in dieser Architektur hat man das nicht, weil da gibt es
das einfach nicht
Man kann prinzipiell auch auseinanderlaufen, also wenn ich jetzt
ein Formular einmal erstmal mir
lade, ein HTML-Formular
und dann vergeht wirklich
eine Menge, vergeht eben Zeit und es gibt
ein Software-Update und dann mache ich bei mir
einen Post von meinen Formulardaten
kann das prinzipiell ja auch gegen den Baum gehen, weil
es dann nicht mehr hinhaut auf Server-Seite
wenn sich tatsächlich an der
Datenschema oder so irgendwas geändert hat.
Und ja, okay.
Aber tatsächlich,
ja gut, okay.
Wir gehen einfach mal davon aus, dass man, wenn man
Dinge irgendwie jahrelang da liegen lässt, man nicht davon
ausgehen sollte, dass die einwandfrei so funktionieren wie am ersten Tag.
Ja, ja, okay.
Aber du kriegst das Problem auch
deutlich schneller. Und du hast halt dieses Problem
plötzlich wieder. Du hast das Problem wieder, dass
du deine Clients aktuell halten musst.
Das war eigentlich,
Das ist eine der großen Versprechungen von Webgeschichten, dass man sagt, das musst du nicht mehr machen.
Also um nochmal zurück zu kommen, die alte Client-Server-Architektur bedeutet,
ich habe eine Hauptanwendung, einen Server, auf dem die ganzen Daten, die ganze Datenbank liegt
und die Clients, die selbstgeschriebene Anwendungen sind, die auf anderen Rechnern laufen,
die dann halt mit dem Server kommunizieren, die halt eine bestimmte Version haben.
Und wenn ich jetzt irgendwas Neues veröffentliche, dann muss ich dafür sorgen,
dass der jeweilige Client sich ein Update herunterlädt, seine Applikation aktualisiert,
um wieder mit dem Server reden zu dürfen.
Der Kern der Applikation ist eben nicht auf dem Server,
sondern der Kern der Applikation ist halt auf dem Client.
Und vom Server kommen nur Daten.
Okay, also der Kern der Applikation bedeutet
tatsächlich
der State der Applikation.
Jetzt hast du schon wieder State gesagt,
ich glaube, das haben wir auch noch nicht so richtig
beschrieben. Was ist denn ein
State überhaupt? Also
die Wahrheit
vielleicht über das, was gerade
ist?
Ja, also sozusagen die Information,
und wenn du jetzt eine Liste von Kontakten hast, zum Beispiel
irgendwie in einer Applikation,
wo liegt diese
Liste? Also auch wie hast du die
sortiert, welche hast du wieder rausgeschmissen und
wer kennt das? Kennt das der Client
selber oder kennt das auch oder nur
der Server? Genau.
Und das ist der Unterschied. Ja, quasi bei Client-Server liegt es
halt beim Client. Ja, oder es könnte
auf dem Server liegen, also der große Unterschied zu Web
ist jetzt sozusagen, okay, jetzt rede ich über
Dinge, von denen ich keine Ahnung habe, aber der große Unterschied
ist halt, das liegt halt in dem
HTML selber.
Das ist halt der große
Unterschied zu allem, was früher war
Das ist halt sozusagen dieser revolutionäre Schritt
Das hat man vorher, soweit ich weiß
noch nie gemacht
Und das ist neu in HTML
und mit REST
Ich kenne halt auch die
Frage, was man will
Ob man jetzt so eine
Seite will, eine Seite, die sich
eben super schnell lädt, weil
der Nutzer bei Google was danach gesucht hat
und dann folgt er dem Link, der ihm
angezeigt wird und dann zack, will er die Seite da haben
und will die Seite geöffnet haben
und sehen und da ist halt ganz wichtig,
dass
was jetzt Google mit den Webvices
oder irgendwas so abprüft, dass
zack, diese First-Time-User-Experience
gut ist, zack, die Seite soll sich schnell laden.
Und witzigerweise
gibt es ein Produkt von dem gleichen
Großkonzern, Google,
zum Beispiel Gmail
und wenn ich Gmail starte, sehe ich
erstmal einen Wartebalken.
Das geht mir natürlich als so zu Eichei auf den Keks.
Sehe ich erstmal,
wie sich die ganze Anwendung lädt.
Das will ich nicht.
Im Endeffekt will ich auch gar nicht so eine
Native GUI
im Web haben. Ich will, zack, dass die Seite
da ist.
Und drum ist
die Frage eigentlich, was man
will. Sicherlich gibt es Anwendungen,
die tut man als Anwender eben
morgens starten und die tut man
abends dann wieder schließen oder so.
Da ist ja noch
Das ist okay.
Was ich will, ist ein Nutzererlebnis.
Also ja, das ist natürlich schon, dass es schnell
da ist. Es muss schnell irgendwas passieren.
Aber ich brauche nicht direkt sofort den ganzen Content,
sondern ich will da so reingeführt werden,
dass ich willkommen bin, dass ich
eingeschubt werde, auch was da funktioniert.
Na gut, aber das ist halt, das liegt halt
im Use Case. Da denke ich drauf an, was das für
eine Applikation ist,
die man da, oder was der Use Case ist.
Und für die allermeisten Web-Use
Cases ist es halt wichtiger, dass man
quasi von, dass man das auch
und Jochen unterhalten sich über die Programmiersprache Python
zu klicken. Also das mit den Links
und dass man von einer Seite auf die andere kommt, das funktioniert
nur, wenn es halt diese,
wenn da nicht jedes Mal
megabyteweise Zeugs rüberkommt und initialisiert
werden muss und nicht irgendwie eine komplexe
User,
ein komplexes User-Interface hochgefahren wird, sondern
wenn es halt was Einfaches ist. Auf der anderen Seite
ist natürlich diese Vernetzung auch total
interessant und cool.
Ja, ich meine, die großen
Web-Frameworks, die
wie React und Vue, die haben das ja auch erkannt
und jetzt versuchen die,
serverseitig zu rendern.
Dann gibt es dieses mit Hydration
und Dehydration oder
Serverseitrendering und den ganzen Späßen.
Moment, was ist Hydration, was ist Dehydration,
was ist Serverseitrendering in dem Fall?
Gemeint?
Ja, also du benutzt im Grunde
Node.js auf dem Server, um halt
dein, also du hast ja
meistens dann auch so eine Templatesprache, so ähnlich wie
Django-Templates, bloß halt in JavaScript,
also JSX oder weiß nicht, wie das bei Vue heißt,
keine Ahnung. Und du kannst
das ja jetzt, du kannst es im Browser rendern,
da läuft JavaScript, was seine
Templates nimmt und dann halt
quasi mit den Daten, die es über JSON oder sonst irgendwie bekommt,
halt dann HTML rausrendert.
Du kannst es aber auch auf dem Server rendern.
Du kannst ja da Node.js laufen lassen, dann kannst du auch Templates nehmen
und dann halt auch HTML rausrendern.
Und das HTML, was du da rausrenderst, kannst du
auch einfach so an den Kleinen schicken.
Sodass das Rendering halt nicht bei dir im Browser
passiert, sondern auf dem Server.
Das ist halt dann für kürzere Antwortzeiten.
Ja, ja, also dann
fühlt es sich für deinen Browser, ist es dann so wie
eine klassische, wie so
eine Django-Webseite oder so.
Und dann aber schiebt der Server
ja doch dann noch irgendwie so ein JavaScript-Bundle
dahin und dann wird das ersetzt.
Und ich weiß nicht, ehrlich gesagt, ich weiß jetzt auch nicht genau, wie das
funktioniert mit dem Hydration oder so.
Aber was ist jetzt das Hydration?
Ich nehme mal an, dass es irgendwie so
sozusagen
diese reine, das HTML-Wass gekriegt ist,
ist quasi in Anführungszeichen irgendwie trocken.
Und weil es halt so
statisch ist. Und ich nehme mal an, dass sie mit Hydration
meinen, du schickst halt den Bundle
dahin und wenn das Wandel da ist, dann sagt es, okay, jetzt gibt
man die Daten per JSON und dann rendert es das
halt auf den Client selber.
Dann ist das, was zum Beispiel bei Vue.js in den Komponenten passiert,
wenn da bestimmte Teile
im DOM getauscht werden, so HTML-Stipsel
von Antworten vom Server dann auch.
Nee, das muss man bloß,
das ist bloß on top sozusagen.
Das ist bloß, wenn du es optimieren willst.
Also das ist bloß für
den Fall, wenn du feststellst,
eine Vue-Anwendung, die ist eben
jetzt nicht so schnell für den First-Time-User,
dann kannst du dieses
Hydration, Dehydration einsetzen,
um diesen ersten Seitenaufruf
zu beschleunigen.
Und sozusagen als Browser, wenn du auf so eine
Seite, wenn du jetzt zum Beispiel NUX
nimmst bei Vue und machst da
Server-Site-Rendering, dann dein
Browser kriegt einfach nur HTML und zeigt
das an, wie bei jeder anderen Seite auch.
Für den
führt kein JavaScript
erstmal aus.
Nur dann später. Also
die Frage ist, wo es gerendert wird. Bei Server-Site-Rendering
wird es auf dem Server gerendert und bei
irgendwann später, wenn das Bundle da ist,
was halt aber megabyteweise Zeug sein kann,
ja, das dauert halt, bis das da ist,
dann wird wieder auf den Client gerendert
und dann werden nur die Daten per JSON geholt
und das ist, denke ich, das, was mit
Hydration gemeint ist.
Und die Sache ist, es ist ja schön, dass man das alles
machen kann. Und die
Frage ist aber, ob man es will.
Und da bin ich eben
vielleicht auch zu alt oder zu
steif. Ich verwende
seit Jahren Python und bin mit der Sprache
sehr zufrieden.
und dass ich jetzt JavaScript, die Sprache, die mir eh nicht so 100% sympathisch ist,
jetzt auch noch auf dem Server einsetze oder irgendwas,
habe ich eben persönlich keinen Bock drauf.
Und darum habe ich das Schöne, ich habe da angefangen im privaten Kontext auch,
ich habe für jemanden eine Seite machen wollen und so ein Bestellsystem.
Und das Schöne, da hatte ich einfach Zeit und es war auch kein Druck irgendwie da
und auch keiner, der gesagt hat, Thomas, nimm die oder jene Tools.
Wenn man da Zeit hat, kann man wirklich nochmal recherchieren
und auch sagen, nee, so möchte ich es jetzt nicht machen,
ich will es jetzt so machen.
Und dann habe ich erstmal ewig gesucht,
bis ich überhaupt was gefunden habe
und durch Zufall bin ich eben auf das HTMX dann gestoßen.
Inzwischen ist es auch populärer,
inzwischen steuert man selbstständig zu,
aber vor mehr als einem Jahr war das eben noch recht unbekannt.
Gut, und da war es halt eine coole Sache
und gerade wenn man halt
eh sagt,
man selber ist in einem
Backendsprache damit vertraut,
dann
macht das eigentlich großen Sinn,
weil dann kann man das auch sehr
leicht verwalten, diesen Stack.
Ansonsten, ja, sicherlich
kann man das machen. Ich glaube auch, dass das
prima funktioniert mit dem Vue und React und so alles.
Aber wenn man das selber
alles in der Kontrolle haben will,
also ich kenne es selber jetzt beruflich zum Beispiel,
nutzen wir auch Vue.js
und ja, das ist dann
manchmal so, hm, dann ist der
Frontend-Entwickler sozusagen
oder da ist da einer mal krank oder im Urlaub
oder irgendwas und dann klemmt es Frontend-seitig,
obwohl Backend-Kapazität dabei ist
und dann ist es gleich mal andersrum oder irgendwas.
Ist doch eigentlich schöner, wenn man
da sagt, okay, ich mache wirklich eben
Fullstack vom HTML bis
zur Datenbank, habe ich alles unter Kontrolle
und da finde ich diese Trennung
zwischen Frontend-Entwickler und Backend-Entwickler,
das ist so wie
so eine komische Diskriminierung,
irgendwie, ja,
muss eigentlich nicht sein.
Ja.
Ja, ja, ich würde auch sagen,
also normalerweise ist diese Unterscheidung von
Webpacking eigentlich halt hauptsächlich irgendwie, es gibt halt Leute,
JavaScript mögen und es gibt andere Leute, die
JavaScript free-bail finden und
das war jetzt auch schon mal, also
ja.
Alle, die JavaScript-Liebe haben,
die bitte einmal aufzeigen.
Ja, naja, gut, also ich,
das ist übrigens auch so ein Ding,
Also ich meine, im Grunde die Entwicklung wird da getrieben von, also weil in der JavaScript-Welt und ich höre da ja auch ab und zu Dinge, da geht man jetzt sozusagen schon in die Richtung zu sagen, ah ja, also wir sind jetzt eigentlich weit genug, warum machen wir nicht JavaScript also komplett, also auch im Server vor allen Dingen.
Es gibt eigentlich keinen Grund mehr, das nicht zu verwenden. Ich würde sagen, schon, doch gibt es Gründe, das nicht zu verwenden. Aber sagen wir so, diesen Druck, den gibt es schon sehr stark.
und aber nochmal vielleicht ganz kurz,
ich würde ganz kurz nochmal
da ansetzen, wo wir
eben waren, weil auch
man kann jetzt mit diesen Frameworks natürlich auch
Serversite-Rendering machen, nur das löst
die Probleme nicht. Also
wenn alle Webseiten
irgendwie fette
irgendwie Dinger wären
mit Serversite-Rendering, würde das
Web so nicht mehr funktionieren. Das würde kaputt
gehen. Also und das ist
halt irgendwie, weil du musst diese Megabyte-Daten ja
immer noch durch die Gegend schieben.
Auch wenn dir das jetzt nicht mehr so auffällt,
aber da werden halt dauernd
die gleichen
minifizierten JavaScript-Dinger durch die Gegend geschoben.
Wenn du von einer Seite auf die andere gehst,
immer das gleiche Zeug, megabyteweise.
Das ist total verrückt.
Weil ich nicht die Einzelteile
vom Dom nur tausche?
Ja, weil du musst halt die komplette Applikation
schickst du halt in der Gegend rum.
Ja?
Und die Applikation ist ja in weiten Teilen immer die gleiche.
Okay.
Aber so viel ist es ja nicht. Ich meine, es wird ja dann
gecached und ich kann mir vorstellen,
dass die ersten drei Bilder
jeder Webseite dann größer sind
als das ganze JavaScript-Spaß.
Also ich hätte jetzt auch tatsächlich irgendwie
intuitiv gedacht, dass man das halt auch mit VJS zum Beispiel
so löst, dass man dann eben nur
den einzelnen kleinen Bestandteil
dann innerhalb dieser Komponente
neu rendert.
Ich weiß nicht genau, es gibt noch so
Geschichten, da bin ich jetzt aber auch nicht vertraut mit,
dass du so dieses Hot-Module
du kannst halt teilweise
mit, es gibt so Exima Script jetzt Module irgendwie auch und manchmal kannst du halt,
musst du für manche Seiten, kannst du Module nachladen und so, aber bisher
der klassische Weg war halt, du baust deine komplette Applikation in einen JavaScript-File
und das lieferst du aus. Und solange du das nicht hast, geht gar nichts.
Und ja, also
wenn deine Applikation, also ich meine gut, sie muss nicht über Megabyte groß sein, aber
ja, also es ist schon groß und
und ja, oft ist View drin oder React und dann halt die Bibliotheken, die alle verwenden
und das Zeug wird halt bei jedem, wenn du auf eine andere Seite gehst, wird das halt immer mit übermittelt.
Und das ist ja eigentlich vollkommen verrückt ineffizient.
Also es ist ja eigentlich, tut einem ja weh, wenn man sich das so überlegt.
Eigentlich wollten wir ja über HDMIX reden und nicht über Render.
Nicht was anderes irgendwie.
Ja, okay.
Genau.
auf.
Ja,
wie
funktioniert das denn bei
HTMX?
Ja, wollen wir mal so ein Beispiel
besprechen?
Ja, also wir können mal ein Beispiel
besprechen. Also am
besten, man gibt dann selber mal
HTMX einfach in seine bevorzugte
Suchmaschine ein und dann kommt man
auf die Seite und da gibt es auch ein paar Beispiele
oben in der Kopfleiste ist das zu sehen,
ein paar Examples und
ein. Beispiel ist zum Beispiel Click2Edit. Das ist, glaube ich, mit das erste. Da hat man erstmal so eine ganz normale HTML-Seite und da unten ist so ein kleiner Block und da steht irgendwie Click2Edit und in diesem Block sieht man irgendwie Name, sage ich mal, Peter oder irgendwas oder irgendein Name, Vorname, sogar ein ganz einfaches Nutzerdaten irgendwie. Da kann man hinklicken und wenn man hinklickt, dann tut sich dieser kleine Bereich aktualisieren und man hat einen HTML-Block.
HTML-Formular. Dann kann man dieses HTML-Formular eben befüllen und sagen speichern und mit dem
Speichern, schwupp, ändert sich wieder dieser kleine Block und der ist sozusagen wieder Read-Only,
wie er am Anfang war, bloß mit den aktualisierten Daten. Und das Ganze funktioniert natürlich so,
dass kein, der gesamte Browser immer auf dieser Seite bleibt, also nicht die gesamte Seite wird
neu geladen. Also sprich, ich würde mal irgendwo hingescrollt haben oder irgendwas und es dann unten
auf einer Seite machen, würde die Scrollposition oder irgend sowas alles gleich bleiben.
Da ist die Frage, wie das funktioniert.
Mit dem Click to Edit wird dann der Server kontaktiert und der Server schickt dann ein kleines HTML-Schnipselchen an den Client
und entsprechend der Angabe in dem HTML und das HTMLx erweitert im Endeffekt das HTML bloß um ganz einfache neue Attribute.
anhand dieser Attribute stellt eben diese Library fest, aha, das soll hier eingefügt werden.
Gibt es verschiedene Swap-Methoden, da kann man sagen, innerHTML soll ausgetauscht werden,
also dass in dem Tag oder outerHTML, sprich das Tag selber, auch mit ersetzt werden.
Und dann kriegt man eben dieses HTML-Schnipselchen vom Server und das wird dann durch HTMLX dort eingebaut.
und dann hat man das Formular, kann es befüllen und am Endeffekt passiert der gleiche Spaß wieder.
Also ich kann das als Nutzer dann ausfüllen und wenn ich auf Speichern klicke,
dann wird eben auch nur dieser kleine Bereich zum Server hingeschickt
und man erhält wieder ein HTML-Schnipselchen, der dort an dieser Stelle eingebaut wird.
Und das Schöne für den Anwender ist, dass es halt super simpel ist.
Man muss dann bloß mit ganz wenigen Attributen sagen, hier, tauschen wir bitte dieses oder jenes aus und dann hat man das Ganze schon.
Also man muss sich da nicht mit JavaScript beschäftigen oder so.
Und ja, das ist sozusagen diese Grundidee der Bibliothek, dass man HTML-Schnipsel über die Leitung schickt und das deklarativ im HTML verfügbar macht.
Ja, sehr spannend. Das macht doch auch solche Sachen wie möglich, dass man dann...
Das ist auch ein weiteres Beispiel
auf der Seite, dass man Infidelscrollen
machen kann, dass er dann in diesem HXWeb-Attribut
einfach After End sagt und dann wird das einfach
angehängt.
Das ist auch ein schönes Beispiel.
Da kriegt man
den besten Eindruck, wenn man einfach mal
durchgeht.
Das ist schon super.
Eigentlich ist die Idee,
mich wundert, dass das nicht schon viel früher
passiert.
Das ist ehrlich gesagt.
Das ist genau von dem ich
eigentlich geträumt habe, gerade vor Jahren,
als ich mit Jake Ferry da so, sagen wir mal,
selber irgendwie was gelöst, irgendwie.
Und das ist eigentlich die Idee dieses Deklarativen
auch. Also das ist eben,
das HTML ist da sehr schön,
diese Beschreibungssprache.
Es ist keine Programmiersprache, eine Beschreibungssprache.
Aber im Endeffekt geht ja
vieles hin in das Deklarative.
Also man will ja einfach bloß sagen, das soll
so und so sein und dann kümmert
sich irgendein anderer Prozess dann darum,
dass das dann auch umgesetzt
wird und so. Und das macht es im Endeffekt dann einfacher.
Ja und im Grunde
behandelt es eigentlich, macht es
genau das gleiche, was man im Browser auf einer Webseite
tut, nur halt nicht jetzt
dass man zum Beispiel, wenn man im Browser halt auf einer Webseite
ist, kann man ja immer nur das komplette
HTML-Element ersetzen
und jetzt hat man sozusagen per JavaScript
in HTMLX halt die Dinge
die man nur auf dem einen großen Ding machen kann, kann man
jetzt auf allen kleinen Elementen halt auch machen
man kann das halt irgendwie durch was anderes
ersetzen, man kann
also normalerweise im Browser lösen halt nur
zwei Events
lösen halt irgendwie ein Request aus.
Das eine ist halt anchor, anchor-tag
und das andere ist halt irgendwie
submit, also form.
Und es gibt nur
get und post, aber es gibt ja noch
viel mehr HTTP-Werben.
Es gibt ja noch die lead-put-patch
und das habe ich mich auch früher gefragt.
Da gab es auch so bei Django REST Framework
ja irgendwie über diese browsable-api
und dann wollte ich halt mal so, da drinnen
kann man ja auch Dinge hinzufügen und so.
Okay, und jetzt muss ich noch put testen und so.
Komisch, put geht irgendwie nicht.
und Jochen unterhalten sich über die Programmiersprache Python
wächst. Also zum Beispiel
Django, was ich jetzt hier eben
einsetze für die Serverseite,
kann man ja auch auf einer HTML-Seite
mehrere Formulare dann
reintun und mit Präfixen das dann
auswerten und so weiter.
Und es war auch, wenn ich mich da
zurückerinnere, rechter Krampf irgendwie immer.
Und hier ist es einfach
entkoppelt.
Ich kann ja auch auf einer Seite drei Formulare haben
und die submitten sich eben
einzeln individuell. Da brauche ich
da nicht ein großes
Formular machen mit drei
Unterbereichen oder so. Das macht es
auch serverseitig deutlich
einfacher, das zu handeln.
Ja.
Naja, und es ist jetzt
tatsächlich auch nicht nur, also
hat demnächst vielleicht zu der Geschichte, dass
der Autor hatte vorher
eine Bibliothek geschrieben als jQuery
Plugin. Das nennt sich
irgendwie Ethercooler.js.
Daher, das hat auch mit
jQuery relativ viel zu tun.
Und das war halt
dann quasi auch halt,
HTMX ist jetzt noch in der Nachfolge davon, der dann halt ohne
JQuery auskommt und diesen ganzen Kram nicht mehr macht.
Und
was ich auch,
wo ich auch denke, das ist
halt ein sehr
breiter Trend, das macht es auch
so interessant, weil es ist halt nicht nur diese eine
Geschichte, es ist nicht nur HTMX, sondern
diesen Ansatz verfolgen ganz
viele Projekte in ganz vielen unterschiedlichen Sprachen.
Und ich weiß nicht,
in welchem Talk das war, ob das
der von der JunkoCren US
Es war auch, glaube ich, mit TalkPython2Me
Interview mit dem Entwickler von
HTMX, sagt er einen Satz,
den ich von unterschiedlichen Leuten aus unterschiedlichen Communities
schon ganz oft gehört habe. Den habe ich auch schon gehört
von Chris McCord von Phoenix LiveView
und ich habe den auch nochmal woanders gehört.
Und zwar, der Satz ist, ja, also ehrlich gesagt,
dafür, dass ich kein JavaScript schreiben wollte, habe ich jetzt ganz schön viel JavaScript geschrieben.
und das
sagen, also das ist halt
dieses Thema, also ganz viele Backend-Leute,
die eigentlich nie JavaScript schreiben wollten,
haben jetzt
dann doch viel JavaScript geschrieben, um das loszuwerden
und wenn
das viele Leute machen und
quasi zu einem ähnlichen Ergebnis kommen und
das tatsächlich funktioniert, dann wird das wahrscheinlich
auch so bleiben und das sieht danach aus, als hätte
man da was gefunden, was tatsächlich gut funktioniert und das
macht es dann natürlich auch interessant, also wenn das jetzt nur
eine Geschichte wäre, aber ich weiß
nicht ob mir jetzt die ganzen Namen einfallen, aber
in der Ruby on Rails Welt
also bei HTMLX wird ja auch viel mit Ruby on Rails
zusammenverwendet, gibt es halt noch Hotwire
also ist auch Akronym
für HTML over the wire
und Turbolinks, wo
halt dann quasi schon die
Seite hinter dem Link gefetcht wird
sodass wenn man auf den Link draufklickt, das halt dann
direkt da ist
dann gibt es
eben bei
Elixier
in der Elixier Welt Phoenix gibt es LiveView
wo auch HTML-Snippets halt über den Websocket
geschickt werden, dann gibt es das
in PHP,
da heißt das irgendwie Livewire in Laravel
und
ja,
ich weiß es gar nicht, da gibt es
also auf jeden Fall in vielen unterschiedlichen
Communities machen Leute jetzt gerade sowas
und ja,
das scheint irgendwie ein sehr, sehr
breiter Trend zu sein, ja.
Der Schöne an dem HTML-X ist ja auch,
dass es
sich da vollkommen raushält, also das
kann man mit jedem
Backend-Framework nutzen, wie man möchte
und die anderen, die sind halt
oft Backend-spezifisch,
also bei Ruby und Rails
ist es Hotwire
und drum war das,
ich habe es mir angeschaut und hätte
eigentlich da Interesse gehabt, aber das war dann
irgendwie schon wieder irgendwie kompliziert
und nicht so einfach. Das
HTMX hat es, glaube ich, der Carson Cross
hat es da sehr, sehr schön
nochmal reduziert von der Komplexität
und das ist ja auch im Endeffekt sein Ziel.
und Jochen unterhalten sich über die Programmiersprache Python
von Adam Johnson,
der hat irgendwie ein Ding geschrieben,
Django HTMX,
das ist eben als
Integration jetzt auch in Django als Framework,
aber das macht auch fast nichts, das macht ganz wenig,
das macht nur
sozusagen eine Middleware dabei,
die an den Request halt ein Attribut
dran bappt,
ich weiß nicht, ist HTMX oder sowas, wo man dann einfach nachgucken
kann, weil man muss auf der Serverseite halt
unterscheiden können, war das jetzt ein Request,
der von HTMX gekommen ist oder nicht und dann
je nachdem, rendert man eben
die komplette, das ist auch sowas, wenn
ein Browser kein JavaScript kann, das ist gar kein Problem
das funktioniert einfach so weiter
weil auf der Serverseite rendert
man halt, wenn man sieht, okay
es war kein HTMLX-Request, dann rendert man einfach
die komplette Seite raus, das ist gar kein Problem
und wenn es ein HTMLX-Request war, gut, dann
rendert man halt nur das Fragment raus, das halt
ersetzt werden muss und das heißt
es funktioniert in beiden Fällen und irgendwie
man hat halt diese Windelware dann, um halt
da quasi sich nicht selber überlegen zu müssen, wie
man jetzt erkennt, ob das jetzt ein HTMLX-Request war
oder nicht.
Und dann hat das Ding auch noch so Teile drin
für, damit diese
Fehlerviews halt
ordentlich funktionieren. Also wenn halt ein Fragment
nicht ordentlich gerendert wird, dann ist
wenn man sonst nichts macht,
ignoriert, also wenn dann zum Beispiel
ein 400 zurückkommt auf ein
HTMLX-Request, dann sieht man nichts, weil
HTMLX schmei einfach die Antwort dann weg Und vielleicht will man die Standard Django aber haben mit dem Stacktrace oder so Und das ist halt auch noch so ein bisschen das ist glaube ich eine HTMLX
in JavaScript, die
in Django-HTMLX drin ist,
die dann halt dafür sorgt, dass man eben die normale
Django-Fehler-Seite sieht,
auch wenn ein HTMLX-Request
halt aus der Seite schiebgegangen ist.
Genau. Also ich habe es mir auch angeschaut, die Bibliothek,
habe eher das gleiche festgestellt
wie du. Es ist relativ wenig
eigentlich drin und es ist auch wenig notwendig
und darum nutze ich es ja auch
gar nicht, weil ich habe mir für mich dann
nochmal überlegt, wie willst du deine
Anwendung gestalten? Also zum einen
unterstütze ich nicht
JavaScript-lose Browser,
also JavaScript ist für meine Seite
jetzt notwendig, also
da ist es schon im 21. Jahrhundert
und aber das ist dann
so, dass ich die
URLs trenne, also
es gibt den ersten Seitenaufruf
und der erste Seitenaufruf bringt eben eine ganz normale HTML-Seite
mit dem HTML-Tag, Head-Tag, Poly-Tag und HTML wieder zu.
Und ab dann werden eigentlich meistens Schnipsel ausgetauscht.
Und die URLs, wo ich eben ein Schnipsel bekommen will,
die liefern immer ein Schnipsel zurück und die werden immer über HTMLX aufgerufen.
Ob das ist diese Fallunterscheidung, selber seit ich gar nicht habe,
von wegen, ist das jetzt ein HTMLX-Request oder nicht.
Es gibt glaube ich auch sowas von Django Forms, irgendwie Django Forms Dynamic oder sowas, dass man da quasi Django Forms nutzen kann, direkt als HTMLX Forms.
Ah, okay. Das kann ich noch gar nicht.
Das ist irgendwie auch ganz cool dazu.
Cool, ja.
Das heißt, also Django Forms kennt ihr vielleicht, da kann man das direkt so einbauen.
Das ist immer ganz hilfreich.
Ja, ich habe letztens auch das irgendwo gesehen, aber ich habe es mir noch nicht angeguckt.
Interessant.
Ja.
Ja, also wir haben so ein bisschen jetzt glaube ich über
die Syntax gesprochen, über das Beispiel und das, was alles Schönes gibt
also man macht meistens halt mit diesem Swap-Target oder sowas, ja, also Moment, es gibt
Swap und Target glaube ich, ja, also das heißt wir haben, wir sagen quasi, was getauscht werden
soll, wohin das getauscht werden soll und wann es
getauscht werden soll. Genau, richtig, das mit dem Trigger geht sozusagen los
also bei einem Form muss man den Trigger jetzt gar nicht angeben, weil bei einem Form ist es
das Drücken auf den Submit-Button.
Aber es gibt eben andere Trigger, wie du vorhin
Dominik angesprochen hast, den Revealed-Trigger
zum Beispiel. Also ich kann so einen Infinite-Scroll
implementieren, indem ich ganz unten eben
einen HTML-Schnipsel habe mit dem
Trigger Revealed und der feuert dann,
sobald dieses Schnipselchen in den sichtbaren Bereich
kommt im Browser. Und das ist natürlich dann
relativ cool. Dann kriege ich das Event, dann hole ich mir
neue Daten, dann kann ich 5, 6, 7
neue Einträge unten
machen und wenn der Nutzer nach unten
scrollt, kommt er wieder nach
unten, kommt wieder das Revealed Event,
und er holt sich die nächsten Einträge.
Dann kann man ohne eine Zeile JavaScript
zu schreiben, so ein Endless
Scrolling implementieren.
Das ist eine feine Sache.
Wir haben
Swap.
Swapmesser in der HTML, tauschen out der HTML.
Target
und out of band gibt es auch noch.
und Jochen unterhalten sich über die Programmiersprache Python
und Out of Band kommt dann noch dazu, bitte tausche außerdem hier das Element mit der ID aus
und dann kommt dann dort die neue Zahl für die gesamte Summe.
Das gibt es auch noch, das Out of Band Aktualisierung von Daten angekommen ist.
Also man kann eben zusätzlich Out of Band, also wenn der Server weiß, hier ich möchte noch was aktualisieren,
was aber jetzt nicht in dem aktuellen Schnipsel mit aktualisiert wird
kann der Server out of band noch zusätzliche Schnipsel mitschicken
was dann eben am Client aktualisiert wird
Anwendungsfall war eben so eine Art Warenkorb
man klickt unten bei dem einen Artikel plus
dann weiß ich, jetzt habe ich jetzt zweimal diesen einen Artikel
aber oben, rechts oben als Beispiel ist so ein Einkaufswagensymbol
und da will ich die Summe aller Waren anzeigen
dann kann ich damit eben das auch aktualisieren
sondern zwei Stellen, einmal diese
unten bei der eigentlichen Ware
und oben im Warenkorb.
Das ist auch so ein ganz nettes Feature
von dem HTMX.
Ja, was gibt's
sonst noch zu sagen?
Ja, auch solche Sachen, dass man
da fand ich auch nett
sagen kann, okay
lad mal dieses Element
alle zwei Sekunden nach, das ist halt auch so ein
Anwendungsfall
für Autoharte, man könnte sich auch fragen, wozu
brauchen wir eigentlich Autoharte und Inner?
weil wenn man das komplette
Element ersetzt, dann werden halt auch
die HTMLX Attribute mit ersetzt
und man kann zum Beispiel dann von der
Serverseite her steuern
wie lange irgendwas dann
also man könnte zum Beispiel, man hat halt irgendwie einen Newsticker oder sowas
und sagt halt alle zwei Sekunden
werden da neue Daten geladen
und dann kann man von der Serverseite aber sagen
wenn man das komplette Element austauscht, okay man nimmt
diesen Trigger raus
irgendwann nach 10 Minuten oder so
und dann werden halt keine neuen
wird halt nicht mehr gepollt quasi.
Und dafür muss man dann das komplette
Element ersetzen. Dann braucht man halt out HTML.
Ja, also genau. Solche Sachen kann man
auch sehr einfach machen.
Was gibt es noch?
Ja, genau.
Überhaupt diese Geschichten, wenn
vom Server Sachen kommen, da weiß ich
auch noch nicht so genau, wie das dann...
Gibt es Support für Websockets oder solche
Sachen?
irgendwie? Ja, ja, WebSocket-Support
gibt es, habe ich aber selber jetzt noch
nicht ausprobiert. Und es wird
aktuell eben die Bibliothek
aktualisiert, dass WebSockets zu einem
externen Paket wird.
Dass man also das gar nicht mehr per Default
drin hat, sondern
dann sich selber nachladen muss.
Ich persönlich finde es gut, das hält die
Bibliothek klein. Ja, die meisten Leute brauchen
das halt nicht, denke ich mal. Genau, und dann kann man es auch
auslagern. Ja,
ich glaube,
Server-Sent-Events
Support dafür ist auch irgendwie drin.
Da dachte ich auch so,
habe ich irgendwann letztens
nochmal geguckt, was das denn wirklich ist, weil das habe ich nie so,
das ist zwar schon uralt und gibt es total lang,
aber ich wusste nie so richtig, was das ist.
Aber ja, es ist halt auch eigentlich nichts Besonderes.
Und vor allen Dingen, es belegt halt auf dem Server auch,
man muss halt eine Verbindung offen halten, nur
dass man halt vom
Client aus nichts zurückschicken kann, sondern es ist halt
eine Verbindung, die immer offen bleibt,
wo man vom Server halt irgendwie Daten
und klein schicken kann.
Aber ja,
mit Django geht das nicht gut.
Aber man muss halt dafür
Django Channels verwenden.
Ja, genau.
Eine Sache fällt mir noch
ein, mehr so eine allgemeine
Sache.
Viele sind ja Freunde dieser JSON
APIs, weil sie sich dann denken, ah super,
dann habe ich ja eine
API und damit kann ich zum
einen ein Webfrontend machen und
zum anderen kann ich da eine API
anbieten für eine Maschine-Maschine-Kommunikation.
Und das ist aus meiner Sicht
Blödsinn.
Weil man
zwei ganz verschiedene Anwendungsfelder
zusammenwürfelt.
Bei einer GUI,
da will ich super agil sein, die will ich
täglich aktualisieren können, da will ich
täglich deployen können und da sollen
sich auch täglich kleine Änderungen ergeben
können. Weil das den Nutzer
in der Regel nicht stört,
wenn es so ein kleines bisschen irgendwie anders ist
und ein kleines bisschen verbessert wird
kontinuierlich.
Will ich aber eine Maschine zu Maschinenkommunikation haben,
ist sowas wie
A-B-Testing vollkommener Schwachsinn.
Natürlich, ich werde ja nicht
einer Maschine sagen,
du kriegst die API und
der andere Client kriegt
diese APIs und diese Daten.
Das ist ja vollkommen konträre, ganz
verschiedene Anwendungsfälle.
Und drum, das war bei mir
anfangs bei Angular, wo ich dachte, oh cool,
eine API und da kann ich dann
GUI entwickeln und außerdem
eben da einen maschinellen
Zugriff auf dieser Seite haben. Aber es sind eben
zwei ganz getrennte Dinge, die auch
ganz getrennt
behandelt werden sollten.
Da könnte man
ja dann auch dann sagen, na gut, wenn ich Maschine-Maschine-Kommunikation
machen will, könnte man ja
sowas wie gRPC einsetzen,
was dann im Endeffekt auch
mehr Datentypen unterstützt und insgesamt
optimaler ist.
Wir haben noch nicht genau RPC erklärt und jetzt kommst du mit gRPC an.
Das muss man erklären, was das ist.
Das gRPC ist eine Technologie von Google
und das ist ein binäres RPC, also Remote Procedure Call
Methode und das ist sehr effizient
und schnell. Es ist auch
schema-basiert, also du musst klar, der Server sagt klar,
was für Daten er austauscht
und das wird
im Kubernetes-Bereich
oder so ähnlich dann auch stark
verwendet. Aber halt bei den
Web-Entwicklern ist gRPC noch nicht angekommen
und das wird wahrscheinlich auch noch
ein bisschen dauern, bis das
da bekannt und verstanden wird,
um was es da eigentlich geht.
Ja.
Naja, da ist
JSON schon so das Ding,
also ich meine, es gibt ja im Grunde
keinen großen, keinen wirklichen Grund, warum man
jetzt irgendwie, außer dass man halt
das JSON irgendwie nahe liegt, wenn man
jetzt JavaScript macht, aber
ansonsten gibt es ja gar keinen
Grund dafür, dass man könnte halt auch irgendwie
andere
Datenformate halt benutzen.
Ich meine, bei Django REST Framework war das ja auch mal so,
da konnte man halt auch, ich glaube, ich weiß nicht,
ob das heutzutage noch jemand macht, aber früher war das halt
durchaus auch üblich, da zu sagen, okay,
ich rendere meinen Kram nicht nach JSON,
sondern nach XML.
Oder wie heißt dieses
Es gibt auch einen Binär-JSON.
B-JSON?
Jason B.
Ja, nee, das ist es.
Ach, ich hab's wieder vergessen.
Aber ja,
es gibt irgendwie auch eine
binäre Variante davon, die
man auch mit Django Resolver ganz gut verwenden konnte.
Da wurde es halt ein bisschen kleiner.
Aber ja, tatsächlich
benutzen aber doch irgendwie alle JSONs letztlich.
Ja, aktuell.
Ich bin ehrlich gesagt ganz tiefenentspannt.
also um 2001
habe ich meine Diplomarbeit
geschrieben und klar, was war das Thema? XML.
Damals ging alles um
XML und auch das HTML
sollte XML werden und so weiter.
Da bin ich ja so froh, dass dann dort
irgendwie die Vernunft gesiegt hat und
das XHTML sich nicht
durchgesetzt hat,
weil das ist am Endeffekt dann auch nur
Krampf, wenn man das zu sehr
in die Richtung treibt und wie gesagt,
damals war alles mit XML,
aktuell ist alles mit JSON
und da bin ich auch ganz tief
entspannt, dass da dann irgendwie auch nochmal
was Neues kommt. So ist auf jeden Fall
die Entwicklung aus meiner Sicht.
Ja.
Naja, da ist noch nicht
aller Tage Abend, was diese
alle
gehandelt hätten.
Ehrlich gesagt, ich finde es
persönlich angenehmer als XML. XML war nochmal
ein Stück schrecklicher.
Das ist der Grund, wo ich sage,
den Computer will ich nicht anfassen.
Das ist komisch, ganz komisch.
Wirklich.
Ja, klar, da gab es die größten
komischen Sachen wie XLT
und sowas.
Viel schlimmer als Assembly oder sowas.
Tja, ja. Aber wir haben doch einige Sachen nicht
erklärt und zwar, wie hieß der nochmal?
Carsten Gross?
Carsten Gross, glaube ich,
weil er möchte wahrscheinlich vermeiden, dass wir
ihn towern.
Sorry.
jedenfalls hat er so ein Talk gehalten und da hat er auch viel über Haters gesprochen.
Das Akronym ist auch ein bisschen unglücklich.
Ja, sehr gut.
Was ist denn das und worum geht es denn da?
Da hatten wir eigentlich schon drüber gesprochen.
Ja, weil da gibt es ja schon Beispiele auch auf der Seite von HTMX.
Ich persönlich kann dazu halt nur sagen, dass ich es nicht weiß und mich interessiert es auch nicht.
Das ist ein Steckenpferd und er zählt viel und redet viel.
Aber mir ist das zu abstrakt.
Ich halte mich aus den Diskussionen
da auch raus, was ist REST, was ist
HATEOs oder irgendwas.
Für mich ist HTTP greifbar,
HTML ist für mich greifbar und so weiter.
Aber das ist mir dann
zu abstrakt und
kann ich nicht viel zu sagen.
Ich glaube,
die Übersetzung von
HATEOs ist
Hypermedia as the Engine of Application State.
Da geht es so ein bisschen darum, dass
tatsächlich die
und Jochen unterhalten sich über die Programmiersprache Python
eine Perspektive.
Ja, aber genau,
das sind dann halt deine
Datenhaltung, aber
der Application State ist ja jetzt nicht
unbedingt in der,
da hast du ja auch noch andere Sachen, da hast du ja auch noch solche Sachen wie
dein Cache
oder du hast halt vielleicht irgendwelche
Queues und du hast halt auch noch irgendwie
eine Session und
ganz viel Zeugs.
Aber klar, natürlich, also
Die Frage ist halt,
bei alles, was sozusagen im Browser passiert, ist halt
in dem HTML halt irgendwie drin.
Das ist halt so eine Hattie-S-Geschichte.
Aber ja, ich finde das auch ziemlich
kompliziert und theoretisch und das ist
sehr schwer, das zu erklären.
Wenn du es ehrlich wie Dependency
Injection, da kann man sich das hundertmal
erklären lassen und dann sage ich immer,
für mich ist es wie Konfigurierung.
Aber keine Ahnung, das ist
mir zu abstrakt.
Ja, weil man den Talk
schaut und erklärt das halt so ein bisschen.
Das ist vielleicht ganz gut, wenn man das vielleicht ein bisschen versteht.
Aber den Talk müssen wir natürlich auch verlinken.
Der ist natürlich sehr bannrecht.
Ja, das ist wahr.
Ja, okay.
Ja, aber da am besten
hört man sich genau den Talk dann an
und nicht uns, wie wir da hochgelegt werden.
Ja, das ist wahrscheinlich so.
Ich kann da nicht mitreden.
Ja.
Ja, dann habe ich noch eine Frage
irgendwo. Ich sehe da,
wo sind die Grenzen
oder irgendwann, wann sollte man tatsächlich auf React oder Vue umsteigen.
Da kam dann mal vorher so eine Frage.
Und da sehe ich aktuell eigentlich keinerlei Grenzen.
Es erinnert mich so, wie ich vor 20 Jahren mit Python angefangen habe.
Und da war eben so eine Sache in der Firma.
Da meinte ich, wollen wir das nicht lieber mit Python machen,
anstatt aus einer Mischung aus C, C++ und Shell-Skripten.
Und dann hieß es, naja, da konnte ich bloß herausboxen,
dass wir für den Prototypen Python nehmen.
aber danach muss es sozusagen
dann mal richtig gemacht werden.
Eine richtige Programmiersprache.
Ja,
und das war ich sehr froh,
dass ich diesen Kompromiss rausboxen
konnte und im Endeffekt
hat nie jemand dann
nochmal nachgefragt, wir sollten das ja
in C oder C++ machen, weil einfach die Kunden
zufrieden waren.
Das hat schnell funktioniert, war alles prima und da
kamen reihenweise neue Wünsche von
den Kunden, sodass dann
das
eben nie wirklich richtig gemacht werden musste,
wo ich auch sehr froh
drüber bin und so.
Ähnlich ist es jetzt auch hier. Jetzt könnte man sagen,
ja dann, wenn man es richtig macht, dann müssten wir es
doch in Vue oder React machen, aber
keine Ahnung, ich sehe da jetzt
keinerlei Grenzen.
Ja.
Ne, würde ich auch sagen.
Man kann damit wahrscheinlich
für die allermeisten Sachen
ausreichend viel machen.
Das einzige Problem ist wahrscheinlich, dass man wieder wie immer von vorne anfangen muss,
und das einmal alles wieder in schönen, mit der eine Technologie bauen muss oder so,
dass das Change immer das Pain ist.
Das war wahrscheinlich auch der Grund, warum die Leute und die Menschen bei dir dachten,
mit C++ schreibt man bessere Webanwendungen oder so.
Wenn es eine Webanwendung war, das war das natürlich nicht.
Ja, das war damals auch im Web basiert, aber auch viele Backends.
Aber das war halt einfach so üblich, das war unüblich.
Und das Unübliche wird natürlich erstmal in Frage gestellt.
Und da ist klar, es ist erstmal kein Vertrauen da.
und Jochen unterhalten sich über die Programmiersprache Python
ehrlich gesagt sagen würde, das will ich
gar nicht haben.
Frameworks sind nicht meine Freunde.
Und das ist mir durchaus klar.
Ich will eigentlich möglichst wenig mit Frameworks zu tun
haben. Also eins, das du kannst?
Nee, ich will
eigentlich keine Frameworks verwenden.
Weil das Problem bei Frameworks
ist natürlich, dass ich da halt eine richtig fiese,
harte Kopplung,
enge Kopplung dran habe und dass ich
davon nicht mehr wegkomme. Und deswegen
finde ich als Entwickler das natürlich
gar nicht so angenehm.
Auf der anderen Seite gibt es halt einen großen Druck, die zu verwenden
Aber der kommt ja meistens nicht von den Entwicklern
sondern der kommt ja meistens dann halt
und ich würde denken, dass bei den JavaScript-Frameworks
ist das halt so
Das sind halt irgendwie
Firmen, die halt
vorher eine Applikation haben
Das habe ich jetzt auch aus der Nähe
in letzter Zeit irgendwie oft bestaunen dürfen
gerade was irgendwie
in dieser Pandemie-Zeit halt
Die haben halt Applikationen so
tatsächlich in C++ geschrieben oder Java
oder sowas,
die auf Clients laufen,
also die irgendwie auf dem Desktop laufen
und die dann halt irgendwie mit einem
Server reden oder halt irgendwas,
was auch immer die dann tun. Und das
funktioniert aber nicht so gut, weil
irgendwie, wenn die Leute jetzt zu Hause sitzen, dann
den kannst du dann zum Beispiel einfach nicht mehr so gut,
also deren Rechner hast du nicht so richtig unter Kontrolle,
dann irgendwie
Netzwerk ist oft schlecht,
irgendwie, das funktioniert
alles nicht so super. Dann hilft bloß halt so ein
Citrix oder so. Genau, das war
und das ist dann eine Lösung, aber das ist halt auch schrecklich
und
im Zuge
dieses Erkenntnisprozesses, dass dann viele
sagen, oh, das ist ja alles ganz furchtbar, das funktioniert ja gar nicht,
stellen jetzt ganz viele um
auf webbasierte Geschichten, weil
mit webbasierten Geschichten geht das halt.
Und
naja, wenn ich jetzt sozusagen
irgendwie eine große
grafische GUI
Anwendung umstelle, halt
auf irgendwas webbasiertes, naja,
Dann ist halt sehr naheliegend zu sagen, okay, ich habe hier
mein Team mit irgendwie 50, 100 Leuten, keine Ahnung,
irgendwie ein paar Teams aufgeteilt
und die haben halt ihren
Bildprozess und keine Ahnung, ihre Tools
und die Architektur-Patterns, die sie halt irgendwie verwenden.
Gibt es da nicht vielleicht irgendeinen Enterprise
Web-Framework, das ich verwenden kann,
wo ich das dann quasi genauso machen kann?
Und dann greifen wir halt vielleicht zu Angular
irgendwie oder so, weil das halt
so ähnlich ist und halt auch dieses ganze
Framework irgendwie Sprech
und Enterprise Sprech halt
damit drin ist.
und das Problem dabei ist aber natürlich,
dass man das eben nicht machen kann.
Du kannst nicht einfach irgendwie eine große Applikation nehmen
und dann das
quasi genauso, wie du es vorher gemacht hast,
mit JavaScript machen und dann ist es halt eine Web-Anwendung.
Das funktioniert halt nicht, sondern du musst eigentlich
dir überlegen, okay, die muss dann halt anders
funktionieren, weil Web-Anwendungen halt nun mal einfach
anders funktionieren als diese
klassischen Desktop-UI-Integrale.
Ja, dann müsste jemand auf jeden Fall erstmal den Unterschied verstehen,
was vielleicht schon eine Herausforderung ist
und dann muss ja jemand, der den Unterschied
verstanden hat, den Leuten, die das entscheiden, auch
erklären, dass das auch die richtige Idee ist, das zu tun.
Aber das Problem ist jetzt, stell dir vor, du bist derjenige,
der zuständig ist für diese Entwickler und du weißt, die
kennen jetzt aber ihr sonst was
Framework halt und wie kriegst du
die beschäftigt mit
der Umstellung auf irgendwas Webbasiertes?
Ohne, dass
du die ein Jahr lang schulen musst oder keine Ahnung
wie der Produktivität so beeinträchtigt ist.
Das geht nicht so einfach. Ja, aber wenn du
halt dann ganz verzweifelt genug bist, denkst du dir,
vielleicht geht es mit Angular.
Ich würde sagen, ohne diese Schulung geht das
nicht so einfach.
Also es ist einfach eine schwierige Situation auch.
Also wenn du die Sprache
wechseln musst, ist natürlich schon mal schwierig.
Das heißt, vielleicht ist es gut tatsächlich,
wenn man irgendwie vor Desktop-GUI-Anwendung
in Python geschrieben hat,
dann kann man vielleicht auch Web-Anwendung in Python
schreiben, obwohl ich auch schon finde, dass TestDjango
schon sehr anders ist als GUI-Sache
in Python schreiben, was man ja bestimmt unbedingt machen will.
Naja.
Also ich glaube, diesen Plattform-Wechsel,
den kriegst du nicht so einfach hin.
Also ich wüsste jetzt auch nicht so genau, wie ich jetzt eine Android-Anwendung entwickeln will in gut.
Ja klar, das ist nicht einfach, aber das ist eine Aufgabe.
Aber langsam geht alles Richtung Web.
Also für mich ist der Chromium mein neuer Desktop.
Also ich schalte zwischen Tabs hin und her, die im Chromium drin sind.
Und Native GUI habe ich nur noch den PyCharm.
Und ansonsten eigentlich nichts.
Du bist auch einer von diesen PyCharm-Nutzern, okay, verstehe.
Ja.
Ach, das kann man schon machen.
Du hast ja auch in letzter Zeit viel PyCharm benutzt, ja.
Ja, wobei, also ich meine, ich weiß nicht, wie dir das geht,
also tatsächlich mich benervt bei PyCharm, dass es halt
relativ langsam reagiert.
Letztens habe ich irgendwo gelesen,
David Beasley hat das, glaube ich,
in einem
seiner Readmes zu irgendeinem anderen Softwareprojekt
hat er sehr bösartige Dinge über Java
gesagt, und zwar meinte er so,
ja, Java, ach, der spricht nicht
für Java, sondern er sagte, es gibt
diese Programmiersprache, ihr wisst schon, sie
reint sich auf Lava.
Und da ist es immer so,
die erkennt man immer daran, dass
an diesem
Moment peinlicher Stille,
bevor die Lüfter dann losheulen.
Das ist halt...
Das
Python ist flüssig zu bedienen.
Echt, findest du?
Nein.
SSD, so und
also doch, läuft eigentlich schon.
Naja.
Ich meine vor allen Dingen bei PyCharm solche Sachen, wie man drückt auf irgendeinen Button oder man macht halt eine Tastenkombination. Also man macht zum Beispiel sowas wie, bei mir ist es Command 0 oder Command 1 für den Verzeichnisbaum aufmachen oder halt Git-Dings aufmachen, zumachen. Und ich habe immer das Gefühl, wenn ich das draufdrücke, da sind so 100 Millisekunden Verzögerung oder so, bevor da irgendwas passiert. Und das nervt fürchterlich.
Ich habe übrigens angefangen,
Jochen, dieses Jahr, und das habe ich mir
fest vorgenommen, mein VI einzurichten
und mal zu gucken, ob ich den
vernünftig zu laufen kriege.
Ja, muss man machen.
Ja, es nervt ein bisschen.
Ansonsten, PyCharm finde ich
eigentlich tatsächlich, nachdem ich das jetzt eine ganze Zeit lang benutzt
habe, ziemlich gut. Also von den Features
her finde ich das total super. Da ist es echt gut.
Es ist ziemlich
komplett und
Ja, ist alles durchdacht, aber
irgendwie, dass es halt so ein bisschen, sich so ein bisschen
äh, ja
Ich find's hässlich. Langsam anfühlt, ja gut,
das ist halt eine andere, ja
Persönliches Empfinden,
aber vielleicht kann ich das so stylen, wie ich meine anderen Sachen style
und dann macht das doch gar keinen Unterschied mehr.
Ja, aber tatsächlich,
das mit Chromium ist halt neu, deshalb, ich meine,
da auch da irgendwie VS Code, ich weiß nicht,
ob du schon mal VS Code ausprobiert hast?
Ich hab's mal ausprobiert,
aber
Ja, mehr kann ich nicht dazu sagen
Ja, ich habe Python zum Beispiel auch
eigentlich gar keine Ahnung, ich muss das auch meistens auch auf der Liste
aber kommt nach wie eitern
Ja, weil
da ist es ja auch irgendwie krumm drunter
und das funktioniert eigentlich tatsächlich auch
ziemlich gut, ich würde sagen
tatsächlich, ich habe jetzt auch eine ganze Zeit irgendwie skutt
es ist nicht so komplett wie PyCharm, es ist auch nicht
so durchsacht und so, aber
es ist tatsächlich, wenn man da irgendwie
Command-B oder das ist schneller
als bei PyCharm
Okay, ja, kann schon sein, aber beim Laptop und auch selbst auf meinem Vorgänger ging es eigentlich gut, er hatte mal irgendwie Probleme, als er irgendein Verzeichnis indiziert hat, wo er eigentlich rein indizieren sollte, da hat er ganz schön zu tun gehabt, aber das kann man dann auch exkluden, dass er da nicht reingucken soll, weil da eben zigtausend Dateien drin sind und dann hat er auch oft damit und ging es eigentlich, kann ich erstmal nicht klar.
Vielleicht habe ich auch irgendwas falsch konfiguriert, das kann natürlich auch sein.
Was ich auch mal hatte, da hat es mir immer den Akku leergesaugt,
da habe ich die
JVM für Intel
auf meinem
ARM
Mac verwendet
und das lief dann in der Emulation
und das war irgendwie auch ganz schrecklich.
Da dachte ich mir so, hä, warum zieht denn das so viel Akku?
Dann musste ich eine andere
JVM nehmen und dann war es gut
und dann funktioniert es auch.
Aber ja.
Ja, aber ein was
fiel mir noch ein zu
JavaScript und den ganzen
Spaßsachen, was ich ja
schön finde, dass das HTML sich immer
noch weiterentwickelt
und vorangetrieben wird
sodass man im Endeffekt dann
weniger schreiben muss
zum Beispiel ein Datepicker
oder irgendwas, wenn man danach sucht, da gibt es
tausend Implantierungen
von Datepickern
aber ich als Web-Anwender will
einfach dann nur fertig werden und da
Es ist einfach schön, wenn ich sagen kann, Input-Type ist gleich Date zum Beispiel oder eben Input-Date-Time-Local, um eben Date und Zeit zu picken.
Und das finde ich spannend dass sich da halt das immer noch alles entwickelt und die Spezifikationen gibt es und sicherlich ist es leider noch so dass eben unter iOS
kein richtiger
Chrome verfügbar ist, das ist ein bisschen
schade, dieses
Apple Browser Ban,
aber kann durchaus
sein, dass da die EU
dem bald einen Riegel
vorschiebt mit dem Digital Market Act.
Es wäre sehr
schön, wenn da, weil das ist
Da kannst du als einzelner Webentwickler
ja auch von niederspringen und vielleicht
kommt auch doch mal von der Legislative
da irgendwas, weil es ist einfach ein Markt
der Apple Play Store und
es ist ein globaler Markt und
das dann dort zu diskriminieren
gegenüber anderen Browsern
ist einfach nicht in Ordnung.
Also hoffen wir mal,
dass dort das vorwärts geht,
weil dann ist nochmal mehr Druck da,
dass die Safari
Engine mal vorwärts macht und dass die
da nicht das
absichtlich blockieren können. Das wird ja absichtlich
blockiert, damit sie weiterhin
schön Geld verdienen innerhalb ihres
App-Stores. Und darum hat Apple
überhaupt keinen Bock drauf auf Progressive Web Apps.
Das ist halt vielen Leuten
nicht bekannt.
Wenn man mit Leuten darüber spricht,
die jetzt nicht aus dem Software-Bereich kommen, die verstehen das
erstmal gar nicht, von was man da spricht.
Und naja, hoffen wir mal,
dass da irgendwie das in der Richtung auch
weitergeht.
Weil dann geht es eben
Richtung Progressive Web App,
Progester... Gut, okay, das ist natürlich
wieder eine Sache. Aufhänger
HTMLX, also HTMLX
ist sozusagen
auf keinen Fall offline first oder
irgendwas, man braucht die Verbindung zum Server.
Das ist sozusagen, ja,
sind ganz zentrale
Sachen an dieser Stelle.
Wenn man dann
Web-App schaut, dass man sagt, okay,
man hat eine offline-fähige
Web-Anwendung, klar,
dann ist es mit JavaScript natürlich besser.
Aber
99% der Fälle braucht man das eigentlich auch gar nicht.
Ja, offline-first war auch mal eine ganze Zeit lang, das kam irgendwie so aus dieser ganzen Couch-DB-Ecke und
eigentlich finde ich den Ansatz ja auch ganz interessant irgendwie,
halt quasi auch eine Datenbank einfach auf der kleinen Seite zu haben und
da gibt es ja auch diverse Geschichten in den Browsern, also gibt es ja auch irgendwie, weiß ich nicht mehr,
quasi so ein SQLite haben die meisten irgendwie drin, was man verwenden kann
und dann synchronisiert man das halt wieder zurück
irgendwie und so. Das ist eigentlich auch alles ganz nett.
Aber
ja, tatsächlich
genau war das dann aber
doch nie so nötig, weil inzwischen ist ja doch
fast überall Netz und es funktioniert eigentlich auch ganz gut.
Genau.
Verzehnfacht einfach
die Komplexität und den Aufwand.
Und drum geht
eigentlich alles Richtung ständige
Verbindung zum Internet.
Es gibt ja ganz wenige Sachen, wo es eigentlich
wirklich braucht, wenn ich will. Ich will, wenn ich in der Bahn bin und habe kein Netz,
kein Netzanbinder, will ich eine WhatsApp-Nachricht schreiben können
oder ich will eine E-Mail schreiben und lesen können. Aber für alle
möglichen anderen Sachen brauchst du einfach auch den Server, weil der hat ja die
aktuellen Informationen. Du kannst ja nicht aus den Fingern saugen.
Du brauchst halt eben die Netzwerkverbindung.
Und darum klappt das erstmal so
eigentlich ganz gut. Auch kann man ganz gut
viel abdecken. Eine Frage habe ich mir noch aufgeschrieben.
Ganz zentral ist eigentlich gut, also wir stellen
jetzt HTML-serverseitig.
Und irgendwie bin ich persönlich da jetzt auch noch gar nicht
glücklich, mit der
Methode HTML-serverseitig zu
erstellen. Also ich
habe da jetzt aktuell, verwende ich von Django
zum Beispiel das Format
unterstrich HTML.
Das finde ich ganz praktisch, weil
eben da dieses SaveString
ausgewertet wird. Also da wird
alles, was gequotet
werden soll, wird automatisch gequotet,
außer es ist eben ein SaveString, wo explizit
klar ist, dass der soll nicht gequotet werden.
und das ist für mich erstmal ganz schön,
aber was ich auch
schön finde, sind diese F-Strings in Python
und da
fehlt mir aktuell noch so eine Mischung.
Ich hätte gerne so eine Mischung, dass ich sage, also im Python
will ich HTML erstellen, also ich will das jetzt nicht
auslagern, ich will da nicht immer
zwischen zwei Dateien hin und her wechseln,
einmal in mein Template-File und dann mein Python-File.
Also ich würde gerne das HTML
im Python erstellen
und das würde ich
am liebsten mit F-Strings machen,
Haut aber halt nicht hin, weil das F-Strings
hat ja keine Ahnung, was es quoten
soll oder nicht
und da habe ich bis jetzt auch noch nicht so richtig
die optimale Lösung gefunden
Ja, ne, hab ich auch noch
nichts, ich weiß nicht genau, ob das
mit F-Strings, also
tatsächlich in JavaScript geht das wahrscheinlich
da gibt es ja diese Template Literal Strings
damit könnte man das
wahrscheinlich machen
Ja, wäre schön, wenn sowas
Aber so im Python gibt es das nicht
Ja
Ja, ja, ja, ja, ja, ne
Ne, weiß ich auch nicht
Aber ja, es stimmt
Ich meine, ja, das ist die Frage, ob das
Alle machen das jetzt halt
über diese Template-Geschichten, ne
Aber ob das jetzt der
der beste Weg ist, weiß ich auch nicht
Ja, aber
im Kontext von HTMLX ist es bei mir
solcher Stelle kleine Methoden, die
kleine Schnipsel zurückgeben
Ja, warum brauchen die denn so viel?
Und dann sind das eben 6-7 Zeilen
und für diese 6-7 Zeilen
dann nochmal eine extra Datei öffnen
das tut dann den Fluss beim
Softwareentwicklung
irgendwie behindern
Aber kannst du nicht auch einfach ein Django-Template
quasi in den Spring reinschreiben und den dann
rendern, weil du musst es ja nicht in den File reinführen
Könnte ich auch, ja
könnte ich machen, aber dann muss ich dem halt auch
wieder einen Kontext geben und dann muss ich immer wieder schreiben
Name ist
gleich Name und
Login ist gleich Login und
ähnlichen Spaß muss ich dem Kontext
reingeben. Kann man machen,
funktioniert auch.
Aber irgendwie muss der
seine Variablen bekommen. Man könnte
da vielleicht einfach Globals übergeben.
Ja, aber dann weiß
die IDE nicht mehr, dass diese Variable eigentlich
verwendet wurde. Und tut die
hellgrau anzeigen,
so nach dem Motto, hey, die kannst du doch eigentlich wegwerfen,
die Variable hier.
Ja, auch nicht ideal.
Gibt es noch
Entwicklungsmöglichkeiten an der Stelle?
Ja.
Ja, aber genau das hat mich gerade diese Offline-Geschichte drauf gebracht. Ich weiß gar nicht, ob das Leute machen, aber ehrlich gesagt würde ich das auch gerne mal ausprobieren. Im Grunde kann man ja auch, man kann ja auch, das ist wieder dann das Problem mit der Paketierung, man kann in Python nicht einfach ein Binary bauen, aber wenn ich mir jetzt überlege, SQLite ist ja, also klar, kann man nicht so concurrent draufschreiben, aber ist auch sehr mächtig und kann man auch so ein bisschen auf die Seite bringen.
wahrscheinlich irgendwie das meiste, was man so
braucht, wenn man jetzt irgendwie eine Datenbank
für eine Webgeschichte hat, kann man
nicht einfach die komplette Webapplikation schippen
mit einer SQLite und den Daten drin
und dann sagen so, hier
startet das Ding und dann geht das halt
auf Localhost, hat man halt eigentlich sozusagen
die eigene Seite und dann
wenn irgendwas geschrieben wird, kann man es ja einmal in SQLite
schreiben, aber halt auch nochmal irgendwie übers Netz oder so
oder man synchronisiert die Datenbanken irgendwie.
Das ist natürlich viel möglicher,
prinzipiell kannst du das, also
überwaltet. Da wird sich noch viel entwickeln.
Nach WebAssembly alles kompilieren. Du kannst
prinzipiell auch bei Python nach WebAssembly
kompilieren. Ja, das haben wir auch schon losgemacht.
Puppi-Pupps alles paketieren und dann
haust du noch ein Postgres hinterher und
dann hast du
leider der Kunde erstmal hier
50 Megabyte runter.
Ich meine, obwohl 50 Megabyte sind auch
schnell runtergeladen.
Und dann hast du dort alles
drinnen im WebAssembly.
Ich bin gespannt,
was sich da entwickelt.
Ja, naja.
Tja, tja.
Da kann man auf jeden Fall sich auch noch eine Menge interessante Dinge überlegen,
was man damit alles machen kann.
Ja, ich glaube, im Platin-Mix sind wir so ein bisschen fast zu ruhig.
Ja.
Ich hatte aber beim Thomas noch auf seinem Repo noch so ein paar Sachen entdeckt,
wie sein Working Out Loud Repo, wo er so ein bisschen dann Sachen verlinkt
und dann auch die Pausen-Tipps entdeckt und so,
wo sich einige Sachen an Jochen's Philosophie erinnerten.
und was ich entdeckt habe,
war, du, den PDM,
den kannte ich tatsächlich noch nicht.
Was ist denn das?
Nochmals, habe ich dich schlecht verstanden.
Den PDM, das ist ein Python-Distro-Manager
oder sowas.
Was war der? Ich muss mal gucken.
PDM.
PDM, also ein Paketmanager,
den du entdeckt hast. Als Alternative zu Poetry
hast du den beworben.
Beworben habe ich den, glaube ich, nicht.
Ja, genau.
Ich war einfach da unsicher.
oder was, genau, bei mir ist es öfter so, oder geht ja wahrscheinlich vielen so,
man steht da, nehme ich jetzt Tool A, nehme ich Tool B, nehme ich 0C
und seit einer Weile mache ich das so, dann gehe ich zu GitHub,
zu meinem Account, erstelle da ein Repository, was im Endeffekt aus einer Readme besteht
und dann schreibe ich da auf, was für Möglichkeiten überhaupt existieren.
Das hilft mir, um meine Gedanken zu strukturieren.
Im Endeffekt ist es erstmal eigentlich fast ein Zettel für mich,
und
hat, über das PDM, also das heißt
Python Development
Habe ich auch noch nicht gehört, Karl.
Jetzt ist das M wieder weg,
das ist nicht dein.
Das hast du bei den Python-Tipps
gefunden. Ja, PDM
Moment, ich muss das wieder zurückführen.
Python Development Master heißt es.
Genau. Als Alternative
für Poetry. Ich habe noch nicht genau
verstanden, wovor das ist. Deswegen war ich neugierig,
weil wir ja mit Poetry
in letzter Zeit ein paar Probleme hatten.
und ob das
vernünftig funktioniert. Aber
wenn es dir nicht sofort einfällt, dann hast du es wahrscheinlich
auch gar nicht.
Ich habe damals recherchiert an einem Abend, das mal so aufgeschrieben,
aber ich kann da jetzt keine Details
dazu sagen. Und genau, mir geht es
genauso. Ich tue nämlich den Artikel jetzt hier mal kurz
aktualisieren mit dem Poetry.
Ich bin aktuell einfach
bei Pip und das
klappt auch soweit eigentlich ganz gut.
Das Poetry konnte ich
nicht so richtig da...
Also ich verwende es nach wie vor, ich finde nur, man muss ja die blöden Bugs fixen, die uns allen auf die Nerven gehen.
Ja.
Also ich bin, wie gesagt, mit den PIP-Tools quasi auch nicht warm, dass das irgendwie...
Also ich meine, vom User-Interface her ist Poetry schon deutlich schöner.
Das Problem ist nur halt, es funktioniert nicht.
Ja, genau.
Ja, aber man muss ja nicht immer alles noch verdreckt wegschmeißen, wenn es kaputt ist.
Manchmal kann man sich auch ein bisschen zuverlässigieren.
Ja, gut.
Aber hast du mal, ich meine, ich habe letztens auch wieder, war ich auf dem Repository bei Poetry,
weil ich irgendwie bestätigen wollte
nach irgendwie, ich weiß nicht wie viele Leuten, dass das
auch bei mir nicht funktioniert und
da habe ich dann, also wenn man da, ich weiß nicht
wie viele offene Issues da sind gerade
irgendwie
1000 oder sowas
und das ist ja nur ein einzelner...
Und alle gemeinsam an Poetrys Verbesserung arbeiten
und dann ist das Problem endlich alle mal aus der Welt
geschafft. Tja, tja
ja genau, offene Issues über 1000
also das ist halt schon, ja
und das ist halt nur ein einzelner Typ, der das in seiner Freizeit macht
Ja klar, kann man ihm ja auch keinen Vorwurf machen
Nein, eigentlich nicht.
Das ist alles prima.
Ja, aber es ist halt so beliebt, dass
so Sachen gefunden werden.
Ich brauche eigentlich Hilfe.
Ich habe hier Pip
und dann für Sachen kann man
noch Pip-Tools oben drauf nehmen.
Reicht erstmal voll aus.
Ja, Pip-Tools
habe ich jetzt auch letztens.
Das hat auch ganz gut funktioniert.
Es ist halt so ein bisschen hakliger zu benutzen.
Aber weil man dann halt lange
Kommandozeilen, mit denen man da irgendwie
den Kram dann.
Aber es funktioniert tatsächlich
ziemlich gut, muss ich auch sagen. Und das hat halt die ganzen
Paketfunktionen, die
Pultree hat halt nicht. Aber ehrlich gesagt, die brauche ich
auch nicht. Ja, also was
ich halt eigentlich nur brauche, sind eigentlich zwei Sachen.
Pultree Add, Pultree Remove,
Pultree Update und
Pultree Install. Ja gut, aber dann
ist es ja auch ungefähr bei dem, was PIP-Tools können.
Nur das PIP-Tool ist halt sehr unkomfortabel.
Ja, genau.
Naja, gut.
Ja. Aber irgendwie ist das noch nicht
aller Tage Abend, was das angeht, tatsächlich.
Ja, ähm,
weiß nicht, habt ihr noch was? Habt ihr eure Liste stehen?
Nö, ich bin durch.
Nö, also wir könnten ja noch
Pics machen. Dann kommen die Pics der Woche,
des Monats, der Folge jedenfalls dann.
Ähm, was habt ihr denn
da ausgesucht? Also ich fang vielleicht einfach an.
Ich weiß nicht, ob ich schon mal gesagt habe, das vergesse ich wie gesagt immer.
Ich muss das jetzt mal aufschreiben. Ähm, die Python
DevTools, kennt ihr die?
Das ist so, ähm,
Python DevTools, da kann man sich einloggen.
einfache Sachen, wie statt Print ein Debugstatement
in Python, was dann Prattit Print macht und so,
so einfach so ein paar Kleinigkeiten.
Ne, kenn ich nicht.
Wofür nennt man das, oder was ist das?
Einfach Python.
Was macht das?
Ich glaub, das ist ein anderes.
Guck mal kurz, ist das
auf die Doc, Help Manual,
I.O., irgendwie, Python minus DevTools,
ein Wort.
Ne, ist ein anderes.
Minus DevTools.
Help Manual.io
Nee, okay, das kriege ich nicht hin.
Ja, egal, auf jeden Fall, das sind nicht viele
Funktionen, aber irgendwie fand ich es ganz nett und das sah ganz
niedlich aus. Und ich mag ja so
moderne Terminal-Sachen sehr gerne.
Ah, noch ein Pick der Woche, ich habe meine
Dot-Files mal ein bisschen aktualisiert.
Die sind ja vor allen Dingen auch für
viele Windows-Nutzer ganz gut geeignet, weil ich muss das
ja auch auf der Arbeit nutzen und so. Und
da kann man sich jetzt, wenn man das vernünftig
installiert, unter einer PowerShell
die ganzen Modern Unix-Commands ziehen
und die alle reinpacken. Ist jetzt nicht so Python-spezifisch.
Aber auch Virtual Entwrapper habe ich eingebaut
nur die Funktion, die ich nutze, dass es nicht viele sind
damit es ein bisschen kompatibel ist, weil Virtual Entwrapper
PowerShell irgendwie nicht so richtig funktioniert hat
Das ist doch eine sehr gute Überleitung
Was benutzt du denn zum Managen deiner Dot-Files?
Tatsächlich Git
Was meinst du mit Managen meiner Dot-Files?
Naja, wenn du jetzt auf einer, du hast einen neuen Account
irgendwie auf einer anderen Maschine, loggst dich die ein
setzst du gerne deine Dot-Files da so wie überall sonst auch
Ich habe in meinem .files Repo für die jeweiligen Systeme, also im Moment ist es halt POSIX und Windows
und für Nix ist es auch was, aber das funktioniert nicht richtig, das ist halt nicht public.
Insideskripte, das heißt ich mache halt eine Admin-Shell auf und starte das Insideskript.
Dann klont er mir die eigentlich an die richtige Stelle, die meistens einfach home.dotfiles ist.
Dann im Insideskript führt er dann das Simulink-Skript aus, das heißt der linkt quasi von meinen
Konfig-Files komplett
auf die Konfigs von dem Programm, die ich natürlich
installieren muss, auch in dem Insidescript. Das heißt,
er installiert alle Programme, hat sie im Link und fertig.
Okay, aber
und welches Skript ist das dann?
Hast du das selber geschrieben? Ja.
Ah, okay. Ja, aber da gibt es
ja dann schon einige Sachen. Also ich habe
bisher immer .bot verwendet dafür.
Okay. Aber das ist
mir letztens irgendwie,
als ich,
ich weiß gar nicht, was der Anlass war, wo es mir dann kaputt
gegangen ist. Ich mir dachte so, also das habe ich mir jetzt auch schon so lange nicht mehr angeguckt.
Irgendwie muss ich da mal schauen, ob es da was Besseres gibt.
Vielleicht möchte ich auch sowas benutzen.
Ich habe es alles noch ganz einfach selber geschrieben,
so viel es besser nicht ist.
20 Simlinks oder was der da setzt und dann
einmal Software mit dem jeweiligen
System Paketmanager installieren, den du ja
auch auf Windows installieren kannst. Dann musst du halt nur zuerst
den Paketmanager installieren.
Und dann musst du alles eh umsourcen.
Das macht ja alles drauf.
Und dann hast du immer auf jeden Fall die gleiche Shell, was ich immer sehr super finde.
und was sogar einigermaßen
mittlerweile für die PowerShell geht.
Und das ist auch was ganz Tolles, das ist auch in der DotFile schon drin.
Es gibt seit November
für die PowerShell einen Autocompletion, das so ein bisschen
funktioniert wie das von Fisch und das ist, ja,
das brauche ich natürlich immer, weil ich normalerweise
mit der Fischshelle da sehr dran gewöhnt bin,
weil ich sehr viel Zeit sparen kann.
Ja, genau,
und das Ergebnis war dann,
wäre dann mein Pick,
was ich jetzt versuche zu verwenden.
Also ich bin gerade dabei, das auszuprobieren und zu gucken,
wie ich das so hin bieten kann,
und das ist das Tool, was ich gerne davon hätte
und zwar das Tool heißt
Chessmois
Chessmois
genau
und
das
das ist so ein Go geschrieben
das ist halt so wie so ein, auch eines von den
wir haben ja momentan ganz viele
Systemtools
das macht tatsächlich keine
Simlink-Geschichte, oder macht halt auch unter Umständen
Simlinks, ich glaube aber eigentlich nicht
das
guckt sich an, wie der Zustand
deiner aktuellen Files ist, wie es
sein sollte, sozusagen auch aus dem Git-
Repo und passt es dann halt an.
Und das kann halt jetzt noch so ein paar Sachen
mehr. Also einmal das Schöne ist halt, dass es halt
das Go ist, ist halt
so ein statisches Binary, was keine Abhängigkeiten
hat, relativ leicht auf jeder Maschine
und
das hat halt
auch noch so eine Templating-Language mit drin,
womit man dann halt
sozusagen je nachdem, was auf der Maschine irgendwie
gesetzt ist, halt Dinge anders machen kann,
und Jochen unterhalten sich über die Programmiersprache Python
und probiert damit seit ein paar Tagen Dinge mitzumachen.
Und ich bin eigentlich sehr angetan.
Also ich glaube, das wird wahrscheinlich demnächst
meine neue Lösung zum Managen
meiner .files.
Das klingt sehr, sehr gut. Ich hätte da noch eine andere
Frage an der Stelle. Ich weiß nicht, ob das jetzt hier hinpasst,
aber
wo ich gerade versuche umzustellen ist, die ganzen
Keys, weil du gerade von geredet hast mit
Key-Repos und so, mit Yubi-Keys zu schützen.
Also zwei Faktor-Antentifizierung
da reinzubauen.
Geht das auch einfach so?
Bei mir funktioniert es auch so
Mittel gut. Also ich habe jetzt meine wichtigsten
Applikationen da mit drin, aber das könnte
das wäre natürlich noch richtig
klasse, wenn ich dann einfach an der richtigen Stelle
den richtigen Stick stecke.
Das müsste eigentlich funktionieren.
YubiKey ist halt
die Frage, wie man das
ich meine, ich würde es sowieso
ich meine, ich verwende ja OnePassword,
auch wenn es natürlich
irgendwie auch ein bisschen
unangenehm ist, dass er so teuer ist und dass es
ein sub-strukturales Modell hat, aber
Das ist halt das einzige Ding, was ich gefunden habe, was halt zuverlässig auf allen Geräten funktioniert und halt auch irgendwie eine durchsachte UI hat. Und das funktioniert auch mit Chinois.
Chinois, meine Güte, Französisch.
Franz, Vorsicht.
How to, ich weiß jetzt nicht genau.
Ja, ich muss mir das einfach mal durchlesen, das sieht auf jeden Fall sehr toll aus, weil genau das ist halt diese ganze Skripte,
weswegen ich alles nicht mehr machen muss, weil es alles schon automatisch weiß,
da muss ich dann eine Struktur halten von meinen .files, dann, irgendwie standardisiert oder so.
Ja.
Wahrscheinlich, ne?
Ja, mal gucken, vielleicht mag ich das, das sieht auf jeden Fall sehr toll aus,
dass man einfach sagt, Chemois und dann die gleiche Line mit Install dein Username und dann einfach nur Chemois update, das ist schon cool.
Ja.
Ja, ja.
Ja.
Und du?
Äh, ich?
Ja.
Ich nutze da kein Tool
also ich hatte da früher mal
das wenigstens noch irgendwie weggesichert
oder irgendwie so
also speziell nochmal extra zu einem normalen Backup
aber ansonsten habe ich da jetzt eigentlich
nichts Spezielles, weil ich da auch nicht viel
anpasse eigentlich
also
ja
ich nutze ja nicht den VI oder so
wo es so viele
Ja, ja, den muss man halt irgendwie ausgiebig konfigurieren
Ich habe vom Emacs mal weggewechselt
und da war das auch noch beim Emacs
Das muss man eine ganze Menge machen.
Aber jetzt habe ich eigentlich
nichts, was ich da
groß verwalten sollte.
Da musst du jetzt mit deinem Pick
der Folge noch...
Hast du einen?
Nö, habe ich nicht.
Kein Python, wo du drüber gestolpert
bist und sagst, das muss die ganze Welt kennen.
Ganz kurz, zum Beispiel
eine Sache, die ich gerade gesehen habe,
wo du sagst, dass Sachen installieren, wenn man
das macht, also ich habe
das ist eine der Geschichten, die ich gestern glaube ich gemacht habe,
schon mal, wenn dann
wenn das, man kann
Dinge skriptetifizieren, die ausgeführt werden
sollen, wenn sich was geändert hat
und wenn, ich habe dann zum Beispiel
man kann
bei Mac gibt es ja Homebrew,
nicht Chocolaty, ist es bei Windows,
bei Mac ist es Homebrew,
da kann man ein Brew-File haben, wo die ganzen Pakete, die man so installieren
möchte, drinstehen und wenn man das ändert,
und dann sagt man auf einer anderen Maschine
irgendwie
Update, genau.
Dann wird dieses Skript ausgeführt,
zieht sich das File rein und wenn sich das
geändert hat, dann installiert
es das halt direkt.
Und das ist schon sehr nett.
Ja, sowas muss ich halt alles noch manuell machen. Ich habe halt meine Listen, die dann
unterschiedliche
paketierte Paket-Packages
quasi installieren, wenn ich
das dann will.
Aber ja, ich finde das ganz interessant, weil ich finde, man will vielleicht
auf verschiedenen Maschinen auch nicht immer alle Pakete gleichzeitig
Egal, dass das so ein bisschen...
Ich muss mir das auch jetzt nochmal angucken, wie der Use Case davon ausgedacht ist.
Mir ist noch was eingefallen. Ich habe das
Tool CopyQ
verwendet. Also wie Copy und dann
in Q. Und das ist ein Keyboard-Manager
und das finde ich ganz praktisch, weil der eben
eine History hat von den Sachen, die ich eben
in der letzten Zeit mit Copy und Paste
hergenommen habe. Und dann kann ich mit
STRG ALT V
eben gucken, was ist in der Liste drin. Und da hat er
ja sogar auch Bilder drin und mit Formatierung
und so weiter.
Das ist, finde ich,
super praktisch und dann kann man halt natürlich auch in der Liste super schnell suchen, indem ich mit
Autocomplete halt eben hier die ersten Zeichen von der gesuchten Zeichenkette
eingeben kann. Und das finde ich sehr praktisch, dass man da so
eine Art Rucksack mit dabei hat, da kann man gut alles reingeworfen haben.
Also so ein Copy, also Buffer mit bären Buffern halt, das ist schon sehr schön.
Genau, das gibt es im Emacs, gibt es im PyCharm, aber im Endeffekt ist es ja cooler, wenn man es
auf dem Desktop hat, überall Anwendungen hin. Ja genau, gibt es halt auch irgendwie, ist gut.
oder sogar auf Windows. Ich habe auch mal gesucht
für so eine Alternative für Windows und das
funktioniert alles einigermaßen cool.
Ah, schön. Ja, genau. Das ist ganz praktisch.
Ja, sehr gut.
Ah, ich habe auch noch einen zweiten.
Aber gab es jetzt letztens ein neues Buch
von Adam Johnson? Ein sehr schönes
schon geschrieben. Nennt sich
Speed Up Your Django Tests. Da haben wir bestimmt auch schon mal
drüber geredet. Das ist irgendwie ganz toll.
Wir haben über Tests von HTMX noch gar nicht gesprochen. Das ist mir eingefallen.
Ach, äh.
Wieso? Oder was muss man da?
Das ist nicht so schlimm. Ich glaube, es gibt noch nicht so richtig gute Möglichkeiten,
zu testen.
Klar, natürlich.
Wie in jedem anderen View auch.
Da musst du gar nichts machen.
Das ist toll.
Dann habe ich nichts gesagt.
Ja, das ist tatsächlich sehr nett.
Dann wollte ich dich nicht weiter bei deinem
Boot picken.
Ja, Moment, aber ich würde gerne abschweifen und nochmal über JavaScript herziehen,
weil das noch nicht genau passiert ist.
Also ich habe ja jetzt in letzter Zeit auch so ein bisschen
Vue, Vue ist halt das Framework, was ich
am interessantesten finde.
Und Websockets und so gemacht und so
und da halt auch dann Tests geschrieben.
Und ja, also
dann habe ich
mit Jest ganz viel Tests gemacht
und das ist echt, also das ist,
das hat wirklich keinen Spaß gemacht.
Ist das denn wohl von Jest nicht, diese Clowns-Gaukler-Mütze
auf dem Kopf?
Ich weiß es nicht genau.
Ich gucke mal kurz bitte nach.
Kann sein.
Ja, ich musste auch Tests mit der schreiben.
Ja.
Ja, auf jeden Fall, das war halt echt,
oh, also.
Das ist der Gaukler-Schuh.
Also das ist ja jetzt auch quasi gar nicht mehr so neu und so und dann, ich bin mehrfach in Sachen reingelaufen, wo ich dachte, das geht nicht oder oh, das kann ich jetzt so nicht machen, okay, wie macht man das dann richtig und dann landet man halt auch irgendwie so in so Wüsten-GitHub-Issues, wo seit Jahren Leute sagen, das ist aber nicht so schön hier, was ist denn da los, geht das nicht und dann geht es halt tatsächlich nicht und zwar immer noch nicht und es ist halt auch und dann die Integration mit Vite ist dann halt schwierig und oh, also,
Die Developer-Experience
war eher so
mittelmäßig.
Allen Leuten, die glauben, dass
JavaScript-Entwicklung voll gut ist und
dass das noch nicht zugeliefert ist und dass man das unbedingt auf dem Server
machen möchte, dann
würde ich fragen, also ihr kennt schon so ordentliche
Web-Frameworks auf dem Server.
Habt ihr schon mal verwendet? Ja.
Habt ihr euch das mal angeguckt, wie das da so geht?
Und wenn nein,
guckt es euch mal an.
Aber das wird ja besser. Du hast ja letztens auch noch
eine Sache gelinkt, Pinja als Ersatz für
VX, das ist ja schon eine Verbesserung.
Für den VUX-Store, genau.
Mit DevTools-Support und so, das ist ja auch, ja.
Aber das braucht man halt nicht, wenn man das so ganz
so weit macht.
Ja, naja,
jedenfalls, genau, da wollte ich noch mal kurz...
Genau,
Adam Johnson, der hat
ein neues Buch geschrieben,
Boost Your
Developer
Experience, und genau,
ich habe es noch nicht gelesen, weil es ist so frisch, es kam jetzt
im Montag raus, dass ich noch nicht dazu gekommen bin.
Aber kann man sich mal angucken.
Da ist auf jeden Fall wahrscheinlich
eine Menge tolle Sachen drin. Also es geht halt um
viel, auch jetzt eben solche Dinge
wie halt Pricometux
oder halt
PyUpgrade
und ja,
auch viel Nicht-Django-Zeugs ist da halt auch drin.
Ja, ich kann es auch empfehlen.
Hab schon gelesen. Ach so, sehr gut.
Ja, ich hab es zufälligerweise zugeschickt bekommen
vom Auto her.
Zum Probelesen.
Ja.
und es ist okay, genau.
Also ich finde es auch schön,
auch das vorgehende Buch von ihm,
Speedup, ja, Python-Tests.
Ich finde es schön, wie er schreibt,
ganz pragmatisch, also ohne großes
Blablabla, schön.
Ja, lohnt sich.
Ja, ja, ja, ja.
Na gut, dann noch mit diesen
Worten als Schlusssatz.
Bleibt es noch gebogen und teilt es wieder rein, das nächste Mal.
Ja, klar.
Und hört uns gerne immer, wenn ihr mögt.
und wünsche euch noch einen schönen Tag, Abend, Nacht, wo auch immer ihr seid.
Und bis dann. Tschüss.
Ciao.
Danke, Thomas.