Ja, hallo und herzlich willkommen zur 14. Folge vom Python-Podcast heute.
Ja, wir haben euch uns länger nicht mehr blicken lassen.
Das tut uns natürlich sehr leid. Wir waren ein bisschen hektisch, haben hintereinander beide Urlaub gemacht.
Und dann ist natürlich vorher und nachher immer sehr viel zu tun.
Und wir hatten ein paar Abstimmungsprobleme. Wir wollten nämlich eigentlich eine Projektmanagement-Folge machen.
Das ist dann an schlechten Projektmanagement-Folgen gescheitert.
Ja, ich habe sieben verschiedene Termine gehabt und dann immer wieder verschoben.
Aber heute machen wir deswegen eine Laber-Folge, damit wir euch nicht ganz enttäuschen.
Aber wer ist wieder dabei? Das ist der Tony wieder bei der Christian.
Alles gut. Oh, moin.
Nächstes Mal vielleicht ohne Knacksen.
Mal gucken, wer es denn bekommt.
Das werden wir hinterher rausfinden.
Ja, ansonsten wieder hier aus dem Wintergarten.
Bin auch dabei.
Ja, das ist der Jochen, ich bin der Dominik.
Ja, genau.
Und ja, ich weiß nicht, womit fangen wir an?
Irgendwelche Neuigkeiten?
Ja, genau, wir wollten wieder ein bisschen News aus der Szene erzählen.
Und ihr beiden weiter auf der Pike-Kurve.
Das habe ich leider nicht geschafft wegen meinem Urlaub.
Aber ja, das ist bestimmt sehr spannend gewesen.
Erzähl doch mal, was war da alles los?
Ja.
Also ich
habe dummerweise auch nebenher noch so ein bisschen
arbeiten müssen.
Es war alles so,
man muss halt so
eigentlich so ein bisschen Zeit dafür nehmen.
Genau.
Es tut jetzt noch weh.
Ja.
Aber es war schon interessant.
Ich habe mir einige Dinge da angeguckt.
Super fand ich zum Beispiel
den Vortrag, jetzt habe ich
den Namen vergessen,
Luciano Ramaglio
oder Ramalo,
der das Buch Fluent Python
geschrieben hat, das kann ich auch nur empfehlen,
sehr gutes Buch,
hat einen Vortrag darüber gehalten,
dass vielleicht
diese Unterteilung, die man klassischerweise jetzt
aus der Informatik
kennt, irgendwie
in funktionale, objektorientierte,
strukturierte
Programmiersprachen nicht so
komplett trifft auf das, was man heute so
vorfindet und man sich vielleicht
doch eher an den Features der Sprachen orientieren sollte
oder so und das
hat da schon einen relativ starken Punkt.
Also man
sollte sich mehr daran orientieren, wie die Syntax,
wie die Features, was die Sprache so kann. Ja, was man mit der Sprache
so machen kann, genau und das jetzt nicht, weil
zum Beispiel Python wird halt immer in diese
Skriptsprachenecke gesteckt und
warum, ja, es gibt eigentlich
keinen besonderen Grund dafür, man könnte
es auch in die objektorientierte
Programmiersprachen-Ecke
stellen. Also warum
ist das jetzt keine, aber C-Sharp schon
eine oder so, das ist halt nicht so richtig klar.
Und ja,
so ein bisschen schwingt damit
ja auch dann sozusagen immer das Vorurteil
mit, dass das jetzt gar keine richtige
Programmiersprache ist oder so.
Dann gibt es halt die Gruppe der
richtigen Programmiersprachen, Java, C-Sharp
und so. Und
Python ist halt irgendwie so eine komische Skriptsprache.
Von richtigen Programmieren wird man als Python-Programmier
auch immer ein bisschen schräg angeguckt.
Also das Interessante ist, dass ja jetzt aber alle, die letzten Jahre war es schon so, dass wir uns auf den, wir, also die Python Community und Python als Sprache sich ja über die ganzen Indizes und diese Bewertungen, von welchen Sprachen beliebter sind, immer weiter nach vorne geschoben hat.
Und ich glaube, dieses Jahr hatte ich so...
Ich habe gehört, dass wir das in Indien gelehrt.
Ja, also ich meine, ich habe es die letzten drei, vier Jahre beobachtet, dass Python immer bei allen Bewertungen im Prinzip unter den Top 5 ist.
Und jetzt dieses Jahr hat es ein paar Mal wirklich geknackt, dass wir, ich glaube, bei drei von vieren und ich weiß nicht mehr, welche es waren, auf Platz eins sind. Das sorgte auch dafür, dass unser Branchendienst Heise nach der PyCon und nachdem sie irgendwie ihre eigene Machine Learning Konferenz hatten, sich beim Verband bei uns gemeldet hatten und meinten, sie hätten das gar nicht so richtig gemerkt, aber Python scheint ja irgendwie benutzt zu werden.
Wo das ja jetzt plötzlich herkäme.
Wie kommt denn das?
Ja, genau.
Aber ich glaube tatsächlich, also inzwischen,
ich höre das auch manchmal nochmal,
auch wenn man jetzt, ich hatte heute
auch ein Thema, was wir später
noch aufgreifen werden, auf dem Ticker
und wenn man dann wieder die
Kommentare
dazu durchliest, dann
ist es ganz spannend, weil halt so
breit gestreute Vorurteile gegenüber Python
die letzten, die das immer noch
rausholen von wegen, ja, Indentation ist
ja eklig.
Ja, ich glaube,
das wird nie weggehen, dass da irgendwer
nochmal mit den Augen rollt, aber
ich finde es eigentlich ganz angenehm, heutzutage nicht mehr irgendwie
argumentieren zu müssen einem Kunden gegenüber
oder einem Projekt, ob ich jetzt Python einsetze oder nicht,
das ist jetzt endlich gegessen, nach 20 Jahren
auch mal Zeit. Ja, die letzten gehen schon
in Rente, haben wir gehört, in der letzten Woche, Halloween,
als nämlich der Guido hat
getwittert, dass er Dropbox verlassen
wird und in Rente geht, also endgültig,
nachdem er ja letztes Jahr schon seinen teilweise Rückzug
als benevolent Dictator for Life angegeben hat.
Ja, wobei das sind ja zwei verschiedene Dinge.
Also sozusagen das Thema Erwerbstätigkeit zum Lebensunterhalt,
das hängt da an den Nagel.
Aber den benevolent Dictator.
Wer weiß, ob das nicht insgesamt so ein bisschen mit der Karriere zu tun hat,
dass man sich dann so insgesamt zurückzieht
und dann auch im Berufsleben rausgeht.
Was er als Letzteres gemacht hat,
hat er, glaube ich, Typisierung gemacht in Python, oder?
Irgendwie mit MyPy viel.
MyPy, genau.
Das war sein großes Thema bei Dropbox gewesen.
Da kommt die MyPi-Idee her.
Den Namen von dem Verursacher habe ich gerade nicht im Kopf.
Aber persönlich, Gido hat letztes Jahr beim BDFL,
es war ja kein BDFL an den Nagel hängen,
sondern nur einen nicht definierten langen Urlaub nehmen.
Und der Prozess, der angetreten wurde zum Thema Core-Team
und wie werden Entscheidungen ohne ihn getroffen,
welches Gremium kommt da zustande,
Auch da ist er in dem Gremium ja wieder drin und er ist aktiv dabei.
Ich glaube, natürlich hat er signalisiert, dass er jetzt dann langsam auch irgendwann mal auf seine Gesundheit auffassen muss
und mit seiner Energie haushalten.
Aber ich habe den Eindruck nicht gewonnen, dass er jetzt schon jetzt einen Plan hat zu sagen,
bis dann und dann will er irgendwie komplett sich rausgezogen haben.
Ich habe eher das Gefühl, er will es halt mit seiner Energie eben haushalten, um das noch eine Weile durchzuhalten.
Ja, durchaus vernünftig, ja.
Das ist ja aber dann der richtige Schritt,
wenn er bei Dropbox jetzt nicht mehr gebraucht wird,
oder vielleicht gebraucht wird er schon, aber irgendwie.
Ja, aber das ist jetzt nicht mehr unbedingt machen.
Ja, irgendwann werden wir ja auch ein bisschen mehr Ruhe haben.
Ich meine, Python gibt es ja schon lange, also fast so.
Wir feiern den nicht 30-Jähriges.
Das müssen wir mal rausfinden, wann 30-Jähriges.
Ja, stimmt, das sollten wir nicht verfehlen.
Zünden wir eine Kerze an.
Und ja, ich habe dann noch mal, als ich das gelesen habe,
auch auf Wikipedia geguckt, dachte mir so,
so früh in Rente, aber das stimmt
gar nicht. Das ist ja auch schon tatsächlich
echt lange dabei.
Ja, Guido macht das schon eine Weile und
ich habe ihn aber tatsächlich,
mein Eindruck, wie ich ihn so die letzten
Jahre wahrgenommen habe,
ich habe ihn, glaube ich,
ich weiß nicht, wann ich ihn das letzte Mal gesehen habe,
aber der hat Spaß
an Python. Der hat halt den BDFL unter anderem
deswegen weggelegt, weil natürlich
diese Verantwortung für diese Größe
der Community und mit allem, was halt
dann immer mal in so dynamischen Community-Prozessen
passiert, was halt auch unschön ist,
war für ihn, das ist ja im Prinzip der Move,
zu sagen, ich will nicht, dass das dann
alles, weil ich derjenige bin, der die letzte
Entscheidung trifft, dann zum Schluss
bei mir landet und ich den ganzen Mist an der Backe
habe, sondern dass wir
das halt dann auf mehr Schultern verteilen,
was natürlich dann auch schön ist, vorausdenkend
von natürlich Busfaktor.
Da ist es gut, wenn die Community sich
sortiert hat,
für den Fall, dass es irgendwann Magidoma
nicht mehr geben sollte. Ja, das fand ich auch schön,
also den Busfaktor, das ist ja auch mal
so ein, vielleicht, ich weiß nicht, ob das
jeder versteht, aber das... Was ist ein Busfaktor?
Ich habe gerade nur gesagt, BDFL, BMF...
Das ist halt sozusagen die...
Bad Mr. Frosty. Die Frage,
wie viele Busse unterwegs sein müssen, um eventuell
ein Projekt irgendwie kritisch zu beeinflussen
im Fortgang und...
Wie viele Leute dürfen vom Bus überfahren werden,
bevor das
Projekt dann vorbei ist.
Ja, und das ist meistens eins, irgendwie
so für die allermeisten Projekte.
Und manchmal will man vielleicht mehr haben als
eins, weil es nicht gut wäre, wenn
wenn das so einfach zu beenden wäre
und ich habe aber jetzt
letztens, deswegen habe ich da kurz noch eingehakt
gehört, dass jemand das anders genannt hat
weil er meinte, das klingt immer irgendwie so negativ
wenn Leute vom Bus überfahren werden
und er spricht jetzt
immer vom Lotto-Faktor
Leute im Lotto gewinnen und dann halt
irgendwie was anderes machen vielleicht
Ich meine, der Faktor
war bei Python zu dem Zeitpunkt
eh schon nicht mehr so stark ausgeprägt, weil ich meine
die PSF ist breit aufgestellt, das Code-Team ist breit
aufgestellt. Und es ist natürlich
schöner, wenn man das halt dann nicht in einer
Notsituation machen muss, sondern wenn es halt
vorab geklärt ist.
Das ist halt so ein bisschen wie mit
seinem Partner dann
schon vorher zu klären, wer
Patientenverfügung hat und so.
Ja, so ein Notfallkoffer,
wenn du wirklich so eine Firma hast und dann
darauf angewiesen bist, dann brauchst du einen Notfallkoffer, wo drinsteht,
was du machen musst, wenn der Chef tatsächlich
irgendwo ist, rennen.
Ja, wobei, jetzt haben wir natürlich den schönen Fall, dass wir halt
keinen Notfallkoffer brauchen, sondern dass wir jetzt einen neuen Standard
etabliert haben, wie das Tagesgeschäft
jetzt in der Kernentwicklung funktioniert
und dass Guido halt trotzdem dabei ist, ist halt
schön. Also mir ist es
lieber, wenn Guido sich das jetzt so zurechtgelegt hat,
dass er wirklich Spaß dran hat, als
wenn er irgendwie nach hinten raus dann irgendwann
entnervt aufgibt. Ja, sehr schön.
Für alle, die es noch nicht wussten, also
Python kann tatsächlich auch feste Typisierung, also
wenn ihr MyPy benutzt, dann könnt ihr auch die Typen
festnageln, wenn ihr möchtet.
Also mehr oder weniger könnt ihr immer noch, müsst ihr nicht, aber
es wird euch wenigstens gesagt.
Es gibt eine statische Analyse dazu.
Genau. Ja, aber ihr wart noch bei der
PyCon. PyCon.de, dachte ich auch gerade.
Ja, da waren wir gerade.
Genau, ja, ansonsten,
ich muss jetzt nochmal so gerade überlegen, was hatte ich denn noch
an mir angeguckt, was mir gut gefallen hat?
Oh, das muss ich jetzt, das habe ich mir
dann vorgenommen, mir nochmal näher
anzuschauen.
Nicht nur Alphabet-Notebooks,
das verwende ich schon ganz lange, oder
Jupyter-Notebooks.
Du hattest einen bösen Bug in Python 3.8 übrigens.
Oh, okay. Auf Windows aber nur.
Und da gibt es jetzt so eine komplette Entwicklungsumgebung eigentlich, JupyterLab, die hat auch da irgendwie diverse Fortschritte. Ich habe sie mir schon mal vor einiger Zeit angeguckt, bin dann aber bei den Notebooks geblieben, aber da hat jemand darüber gehalten, was man damit alles so machen kann und das sah schon sehr, sehr gut aus.
Also so ein Problem
zum Beispiel, was man, vor allen Dingen
gibt es ja jede Menge Plugins, die man für tolle Sachen
benutzen kann. Also etwas, was ich
irgendwie immer nervig finde, ist,
wenn man zum Beispiel nicht so richtig DIVs sehen kann,
wenn man irgendwie Sachen eincheckt oder Sachen verändert.
Du kannst ja zu Tupi dann auch einen VS-Code öffnen,
übrigens live.
Oh, okay, das muss ich mir auch mal angucken.
Ja, das funktioniert leider noch nicht richtig gut mit der Dango-Schale.
Zumindest habe ich das nicht vernünftig hinbekommen, aber
ja, doch, sonst.
Ja, aber da waren echt
tolle Sachen dabei. Da waren auch so viele interaktive
Geschichte, man kann da komplette UI-Geschichten
irgendwie mitbauen und
Sachen drin, also ein Plugin
ist, man kann da irgendwie Diagramme
drin malen, so, weil man sich immer
fragt, so, okay, wenn ich jetzt nochmal so
ein Architektur-Diagramm aufmalen möchte oder so,
was nehme ich denn jetzt dafür?
Inzwischen, oft nehme ich dann irgendwie ein Online-
Tool dafür oder so, aber das geht auch alles
in JupyterLab
und ja, also
das war beeindruckend, was da für Fortschritte
inzwischen erzielt worden sind und ich muss
mir das unbedingt wieder angucken, habe es aber noch nicht gemacht, weil
Urlaub, aber also das fand ich
noch ziemlich gut und
was hab ich noch?
Oh, ich hab mir noch einen
Vortrag angeguckt
über
ein System, das ich mal
irgendwann gebaut hab,
wo jemand, da stand schon
im Abstract drin, irgendwie so, ja, wir treiben hier
so ein Machine Learning System seit 10 Jahren produktiv
und hier mal so, was wir alles gelernt
haben und was alles irgendwie schiefgelaufen
ist und was wir dann ändern mussten und so.
und ja, das war tatsächlich etwas,
was ich mal irgendwann mitgebaut hatte.
Damals dachte ich so, oh je, ein Vortrag
darüber, was ich alles falsch gemacht habe vor zehn Jahren.
Aber nee, war sehr gut.
Und was hast du alles falsch gemacht?
Ist das eine Kurzversion von, also auch alles?
Ja, also
was sich die Leute dann nicht mehr erklären konnten,
also das war auch interessant, also viele
Dinge haben dann so hinterher
eine andere Erklärung bekommen, weshalb das denn passiert
sei, aber es gab da
oft irgendwie, die tatsächliche Erklärung war
auf eine andere. Sowas wie zum Beispiel,
warum wurde eigentlich
Disco genommen als
MapReduce-Implementation?
Was auch immer Disco ist.
Das war auch
damals schon nicht so super populär. Das ist
irgendwie so ein Projekt gewesen
von Nokia Research, wo die
halt dieses MapReduce
Paradigma implementiert
haben. Und ich meine, wir haben
damals eine Menge Sachen ausprobiert. Wir haben Hadoop
ausprobiert.
Und der Grund, warum wir dann Disco genommen haben,
war, weil es das einzige Python-Map-Reduce-Framework war
und Hadoop war wirklich, also hätte man nehmen können,
aber das war so, das hat keinen Spaß gemacht.
Und eigentlich, was wir vorher hatten,
war eine selbstentwickelte Geschichte,
aber es hieß halt, nee, das bitte nicht,
sondern irgendwas Externes nehmen an der Stelle,
weil wir nicht da nochmal Infrastruktur selber bauen wollen.
Das war der eigentliche Grund.
Oder dann auch solche Sachen wie,
warum wurde das eigentlich so aufgeteilt?
Diese Probleme kennt man heute gar nicht mehr so.
Das lag, also
warum macht man das überhaupt so parallel, warum macht man das nicht auf einer
großen Maschine? Und der Grund damals war,
dass wir da noch ganz viele 32-Bit-Rechner
hatten. Und da gibt's halt dann bloß
so 3-Gigabit-Hauptspeicher und dann ist
halt irgendwie Schluss. Und dann muss man das Problem
halt in kleinere Dinge aufteilen, wenn man zum Beispiel
Sachen tokenisieren will und die Liste der
Tokens einfach nicht mehr in den Hauptspeicher fasst oder so.
Erstmal so als Beispiel.
Und dann muss man das halt plötzlich dann auf mehrere Rechner verteilen
und dann halt sowas MapReduce-artiges verwenden.
Ja.
Also, ja, das ist alles
und heute würde man das alles gar nicht mehr so machen.
Und noch ein paar RAM-Riegel reinschieben.
Vor allem mehr RAM.
Ja, aber es war auf jeden Fall
eine tolle Geschichte, war so ein bisschen
Nostalgie.
Hat Spaß gemacht, ja.
Das ist cool. So weit möchte ich auch mal kommen, dass ich auf eine Veranstaltung
gehe und irgendjemand einen Vortrag darüber hält, was ich vor 10 Jahren
falsch gemacht habe.
Ja.
Es ist
ja, sie bauen das System,
es ist jetzt auch weg, es gibt jetzt ein neues.
Also es hat jetzt dann wohl ausgedient.
Ja, was
war noch so? Genau.
Dann
war noch so ein Freelancer-Panel.
Das war irgendwie
ganz, ganz
interessant mal da. Da habe ich mich auch
irgendwie viel zu selten beschäftigt
mit dem...
Ja, also das Freelancer-Panel
wolltest du kurz erzählen.
Was eigentlich so die Rahmenbedingungen
von dem, was ich so normalerweise
halt beruflich mache, angeht
und da waren einige sehr interessante
Informationen dabei. Ich weiß aber nicht, ob das
die Leute interessiert haben.
Ja,
das ist schon nett und so.
Ja, ich habe auch nie so,
ich habe dann auch mal einen Begriff dafür gelernt,
wie das heißt, was ich mache. Das heißt irgendwie
Team Augmentation.
Team Augmentation?
Wann ist das Augment für ein Team?
Genau, man arbeitet eigentlich ganz normal
in so einem Team mit und
das war mir alles gar nicht so richtig klar.
Und dann gibt es halt andere Dinge, die man auch machen kann
und das hat andere Probleme.
Aber es war nicht, war nicht.
Und es gab auch tatsächlich inzwischen so,
das habe ich dann aber woanders gehört,
ich glaube in einem Podcast,
es gibt Leute, die dann komplette Teams auch ausleihen
und nicht nur, weil das ist ja auch so ein Problem,
ich meine, wenn du so einen Entwicklungsprozess ...
Du willst aber mal skalieren,
hast auf einmal ein neues Projekt, so ein Side-Projekt,
hast aber gar keine Abteilung, die das irgendwie machen kann
und merkst, hey, du hättest irgendwie noch ein neues Projekt dabei.
Genau, wie macht man das eigentlich?
Das ist schon wieder richtig ein Projektmanagement.
Ja, ja, ja. Und dann gibt es halt eventuell die
Möglichkeit, oder das machen halt momentan
manche Leute wohl, dass sie dann komplette
Sprints irgendwie verkaufen und dann
Teams, die schon gut zusammenarbeiten, irgendwie dann
vermieten. Das ist ja gar nicht so blöd. Und das ist auch
eigentlich nicht so blöd. Das ist schon richtig, ja.
Vor allem, wenn die so guten Code schreiben, dass den niemand anderes
danach auch noch lesen kann und benutzen kann, dann...
Ja, ja, das sollte schon dann alles so best practice-mäßig
im Netz setzen und sagen, hey, cool, damit machen wir jetzt
weiter.
Ich glaube, wenn du das ganz
teamweise machst und
sprintweise brauchst du eine gewisse Mindestgröße,
weil du bei dir ja dann trotzdem wieder
das Zeug zusammenführen musst.
Also es gibt
diesen alten Spruch, ein Freund von mir,
der ist nach dem Abi irgendwann zur IBM,
dass die IBMer, als sie dann
in den 90ern die Informatiker
nach Indien ausgelagert haben,
festgestellt haben, dass sie für zwei preiswerte
Inder einen teuren Deutschen brauchen, der das alles
wieder zusammenzieht.
Da war die
Einsparung nicht so riesengroß.
Da muss man sich wirklich Gedanken
machen, wie das funktioniert.
Ja, aber was, welche, welche, hast du dir eigentlich irgendwelche Vorträge angeguckt oder?
Nee, ich stand, nee, ich stand auf dem Stand. Ich habe, was hatte der Tweet hergegeben? André hat gesagt, wir haben.
Vielleicht hat ja einer unserer Hörer verpasst, was du überhaupt machst, deswegen musst du mal erzählen, was für ein Stand das denn überhaupt war.
Ja genau, also vom Flying Circus, im Prinzip so wie Team-Augmentation, was der Jochen gerade gemeint hat, so ein bisschen Team-Augmentation, so was in der Art machen wir für DevOps-Szenarien, dass du also als Team sagst, der ganze Ops-Kram, ich will das zwar unter Kontrolle haben und wissen,
Aber im Prinzip kannst du das komplette
Management, den ganzen Betrieb der Anwendung zu uns
rüberkippen und dann hast du
bei uns da so ein DevOps-Team,
was man nicht sagen sollte,
aber am Ende sagt man ja wieder, doch nur ein Silo.
Ja, neues Silo.
Ist ein schöneres Silo als vorher.
Also tatsächlich, wir sagen jetzt auch manchmal, dass man
uns die Software wieder
über den Zaun werfen kann, aber
wir klettern dann wieder über den Zaun zurück.
Ah.
Genau. Ja, da haben wir einen Stand
gehabt, um uns ein bisschen zu zeigen.
Und ich stand im Prinzip die ganze Zeit nur auf dem Stand rum.
Du warst nicht in der Nähe von irgendeinem Hörsaal oder sowas, wo man so um die Ecke hören oder so?
Naja, man könnte, ne, die waren halt immer schön zu, damit man da auch die Ruhe hat.
Ich habe aber dafür irgendwie, glaube ich, zwölf Kilo Schokolade verteilt oder so.
Ich habe das halt gegessen.
Das war seiner Karte.
Ja, also ich war dann halt in Summe auch mehr beschäftigt mit so ein paar Metathemen,
Weil ich dann ja doch eher auch von der organisatorischen Seite eingebunden bin, jetzt nicht so direkt bei der PyCon.de, da werde ich dann nur manchmal gefragt, aber gerade über den Python Software Verband, da hatten wir Jahresversammlung, die war ganz gut besucht eigentlich und konnten auch neue Mitglieder gewinnen.
Das war eigentlich ganz spannend, weil die PyCon.de ist ja sozusagen unter der Flagge des Python Software Verbands veranstaltet und zum einen haben wir jetzt mal nach relativ vielen Jahren sehr kontinuierlicher Arbeit im Vorstand nochmal ein bisschen neue Gesichter gesehen, zum einen das erste Mal eine Frau im Vorstand.
Wir haben immer noch keine Folge mit einem weiblichen Hörer oder einer weiblichen Hörerin, also falls ihr Lust habt, kommt vorbei und sagt Bescheid.
Genau, also die Theresa Yufchiu, ich weiß immer nicht ganz genau, ob ich ihren Namen richtig ausspreche, sie ist selber sehr schnell dabei, ihn auszusprechen, das ist ganz schwierig.
Also die Theresa ist jetzt mit dabei, die ist glaube ich in Hamburg und die hat auch im Rahmen von dem Förderprogramm von PSV schon mehrfach mit Schülern und mit anderen Gruppen, ich glaube Raspberries oder MicroPythons verbaut.
Genau, und der Alex Hennendorf, der Hauptorgar von der PyCon.de,
der hat sich jetzt auch noch bereit erklärt, mir zu helfen.
Wir mussten nämlich tatsächlich feststellen, dass...
Der Python-Verband in Summe mit der PyCon.de, das ist einfach inzwischen ein Riesenschlachtschiff.
Wir haben die letzten Jahre ein bisschen gedacht mit, das kochen wir alles mal wieder ein bisschen klein,
dann läuft das alles von alleine und in Wirklichkeit, da gibt es nichts klein zu kochen.
Wir haben irgendwann mal vor drei, vier Jahren da gestanden und gemeint,
die Verwaltungskosten sind sehr hoch und tatsächlich hatten wir gedacht,
der PySV ist so ein Verein mit 10.000, 20.000 Euro Umsatz pro Jahr.
Das machst du irgendwie nebenbei und wenn man aber die PyCon.de und noch zwei, drei andere Veranstaltungen, die wir drin haben, reinziehst, dann siehst du, dass der Python-Verband jetzt in Deutschland kontinuierlich über eine halbe Million mehr Umsatz macht pro Jahr.
Ja, genau. Und dann standen wir da und dachten so, okay, da ist normalerweise eine Vollzeitstelle für die Verwaltung fällig. Und deswegen der Alex Hendorf, der hat sehr viel Zeit in die PyCon.de steckt, der hat auch bei sich aus dem Team jetzt jemanden, den wir vom Python-Verband bezahlen, der das dann fast in Vollzeit tatsächlich machen wird, die Verwaltung vom Verband aufzuziehen.
Das wird, glaube ich, ganz gut, weil da haben wir jetzt auch gemerkt, das ist ein Thema aus der Open-Source-Community an sich ja, dass Volunteer-Burnout irgendwann mal kommt, wenn du die Leute vor allem mit irgendwelchem Kram überlastest.
Wir haben so ein paar Sachen mit Sponsoren. Wenn du mit den ganz Großen jetzt halt immer im Bett bist, da hast du ja wirklich von Microsoft und Google und Ebay und sind halt irgendwie alle dabei, weil alle mit Python arbeiten und alle wollen das sponsern und wollen Mitarbeiter werben und dann hast du aber plötzlich so ein Glück, dass es heißt, ja, bei uns im Beschaffungsprozess, finden Sie bitte folgende 20 A4 Seiten aus, gehen Sie damit zu Ihrer Bank, lassen Sie von der bitte einen englischen Brief ausfüllen, schicken Sie es darüber und dann müssen Sie innerhalb von sieben Tagen auf den Button drücken, sonst geht das Spiel wieder von vorne los.
Was machst du abends, wenn die Kinder im Bett sind?
Ja, genau, mit
sowas
unterhalten die einen, das ist halt was,
das willst du eigentlich nicht auf freiwillige,
das willst du auf niemanden abgießen, aber erst recht nicht auf freiwillige.
Genau.
Nee, insofern, der
Verband, der steht gerade echt gut da, wir sind es auch
nochmal dabei, dann zu gucken, die Aufgaben zu verteilen,
was die Öffentlichkeitsarbeit angeht und diese
Bewerbung von dem Förderprogramm,
dass es da nochmal ein bisschen vorangeht.
Genau, insofern, da war die
parkrun.de für mich alles mehr so aus dieser
eher so Verwaltungs-Vereinsmeierei-Perspektive.
Aber immerhin, ich meine, es waren
1200 Besucher.
Genau, das hatte ich auch.
Ich habe die genaue Zahl nicht gehört,
aber das waren auf jeden Fall mehr als
1000 Leute und
wenn ich mich so an vergangene Veranstaltungen
erinnere, das ist diesmal
mit den meisten
Publikum da und
es ist kontinuierlich immer mehr geworden und jetzt ist es halt
eine richtig, richtig große Veranstaltung.
Früher war das alles irgendwie überschaubar
und jetzt ist das echt Wahnsinn.
Also ich erinnere mich, die erste Runde, die wir hatten,
die erste in Anführungszeichen Konferenz,
die im Python-Umfeld, die war halt damals von den SOAP-Leuten,
die war 2001 in Bielefeld, da waren wir 24 Leute.
Da haben wir uns an der Uni mit dem Grill getroffen
und mal irgendwie zwei Tage lang uns Dinge gezeigt.
Das war eigentlich sehr cool.
Und damals gab es dann auch schon dieses Thema von,
das zog dann auch ein und dann waren es statt 25 irgendwie 50,
dann hast du irgendwie 100, dann hast du irgendwie 150
und dann war es eine Zeit lang so immer so
in der Größenordnung und ich erinnere
mich, dass ich auf der ersten
Python-Konferenz in den USA
so 2004 glaube ich
war, das waren dann damals
400 Leute
oder so in der Größenordnung
und die wuchsen auch immer weiter und dann
waren es glaube ich in Texas unten in
Dallas waren es plötzlich 2000
und
wir haben uns immer angeguckt, weil
du hast halt auch alles, was die
Konferenzen an der Räumlichkeiten konnten,
gerade was das Internet angeht, du hast immer
alles gesprengt, weil
die dann immer dachten, naja, von 2000 Leuten
sind mal irgendwie 10% irgendwie mit ihrem
Notebook unterwegs oder brauchen
WLAN und du musstest
denen damals mal schon klar machen, nee, hier kommen jetzt
2000 Leute, die haben jeder zwei Geräte.
Genau, und da sind wir jetzt im Prinzip halt auch
angekommen. Ich meine, mit 1200 Leuten sind wir so
groß wie die Europython. Die hatten
glaube ich auch 1200, wobei da gibt's
ein paar Unstimmigkeiten wohl, angeblich
was die Rechnung von Köpfen und
Tickets angeht. Und wir hatten
vor allem 800 Leute auf der Warteliste.
Ja, Wahnsinn.
Also wir werden nächstes Jahr
nochmal die Location wechseln. Ich meine, die
neuen Termine sind schon draußen, also für alle,
die nochmal hinkommen wollen,
es wird nächstes Jahr wieder in
Berlin sein
und tatsächlich die
die habe ich noch, die habe ich jetzt nicht griffbereit,
aber es wird wieder im Oktober sein.
Und es gibt schon offizielle Daten im Oktober.
Die Webseite gibt es gerade nicht her, aber leider nicht mehr im Kosmos.
Das Kosmos fand ich eigentlich sehr schön, das Personal da war auch echt angenehm.
Ich fand es einen guten Move, dass nur vegetarisches Essen angeboten wurde.
Ich finde, das braucht es auf der Konferenz nicht,
dass man sich da mit billigem Fleisch irgendwie versorgt.
Das hat mich überrascht, weil ich zwei Wochen vorher
hatte ich selber darüber nachgedacht, es wäre eigentlich mal cool, wenn das jemand
mal machen würde und war dann ganz positiv
angetan.
Kam nicht bei jedem gut an, ich muss auch sagen,
die haben auch handwerklich leider ein paar
Stellen dann daneben gegriffen, weil es einfach
nicht gut gemacht gewesen war.
Aber die Idee
fand ich auf jeden Fall gut.
Nächstes Jahr wird es dann wohl
noch eine etwas größere Location werden, ich glaube,
da werden wir anderthalb oder tausendsechhundert
Leute reinlassen, aber das ist
im Prinzip schon mit Ansage, dass es wieder eine Wasserliste
geben wird.
Nur wir kommen halt nicht,
es gibt irgendwann keine größeren Locations
mehr.
Irgendwann ist halt Schluss. Es gibt noch
irgendwie am Alexanderplatz
irgendwie da, wo auch der CCC-Kongress
häufiger war.
Ja, warm, warm, warm.
Wir waren noch
bei der Perkin.de, wir hatten ein bisschen geguckt, wie groß es
wird, wo es nächstes Jahr hingeht. Also es wird auf jeden Fall
wieder Berlin sein. Wir werden
zusehen, dass wir irgendwie mehr Leute reinlassen, weil es natürlich
blöd ist, wenn wir
zu viele Leute auf die Warteliste setzen müssen.
Und du hast es gerade erzählt, dass das Essen
trotzdem sehr leckeres, vegetarisches geben
sein soll, irgendwie ab und zu mal komisch geschmeckt haben soll.
Ja gut, ich meine...
Es gab halt vom... Der Anbieter
hat es halt an ein paar Stellen nicht gut umgesetzt.
Ich glaube, am ersten Tag war das Kartoffelkarton halt
nicht durch. Aber das wäre
bei einem Stück Fleisch genauso blöd.
Ja, und das ist natürlich auch schwierig, was
solche Mengen irgendwie alle gleichzeitig...
Ja, da kann man immer mal was schicken.
Da kann man wenigstens ein Challenge.
Ja, aber sie versauen
es auch immer wieder auf die gleiche Art und Weise.
Ja.
Ne, genau, also ansonsten
das war, ich fand es in Berlin eigentlich sehr angenehm.
War vom Umfang her
fand ich gut. Ich habe
halt auch bei mir so viele interessante Gespräche
gehabt. Es war jetzt ja diesmal überlagert
mit der PyData.
Wird es wahrscheinlich nächstes Jahr auch wieder
sein. Man merkt so ein bisschen, dass
es halt, Python hat
je nach Generation schon fast
so ein bisschen unterschiedliche Schwerpunktthemen.
Vor zehn Jahren war Web halt immer so
das treibende Thema im
Programm. Jetzt ist es
alles, was rund um Machine Learning, Data
Science und so geht.
Und das sind eigentlich zwei
Konferenzen, die laufen jetzt aber zusammengefaltet
in einer im Prinzip.
Aber
in Summe ist es einfach so ein extrem diverses
Profil. Es ist halt nicht so, dass
alle jetzt irgendwie erst A und jetzt B
gemacht haben, sondern es wird halt immer mehr.
Das wird halt, man hat halt irgendwie
dieses eine Hauptthema, was vielleicht so 60%
der Themen bestimmt
und aber die anderen 40% sind immer noch
doppelt so groß wie das, was wir
vor fünf Jahren hatten.
Also da ist einfach die Diversität
und worüber man mit Leuten reden kann schon,
das ist fantastisch.
Ja, fand ich auch.
Sehr schöne Veranstaltung.
Ja, sehr spannend. Also dieses Jahr versuche ich mir auch tatsächlich
wieder tiefer in den Kalender reinzustreichen.
Aber dieses Jahr,
da kam leider nichts mehr da rein.
Ich meine spannend ist ja, dass es eine rein englischsprachige Konferenz ist im deutschen Raum und wir so ein bisschen der Europython den Rang ablaufen an ein paar Stellen. Deutschland liegt einfach, das haben wir in Karlsruhe gemerkt und jetzt in Berlin auch wieder, Deutschland liegt halt schön zentral und das heißt, da ist für viele der Anfahrtsweg gut kalkulierbar, als wenn es dann irgendwie mal in Spanien, zu Schweden, zu Edinburgh war es glaube ich auch mal.
Schweiz war jetzt dieses Jahr, glaube ich,
ganz gut.
Und das ist Dublin angenagt, oder?
Das ist nächstes Jahr.
Ja, kann sein, weiß ich nicht. Aber diesmal war es, glaube ich, Basel.
Genau, diesmal war es Basel.
Ich meine, Schweiz ist halt auch ein tolles Pflaster.
Das schreckt auch immer so den einen oder anderen ab.
Was war denn in Stockholm?
Keine Ahnung.
Wann war das denn?
Es gab irgendwie eine Django-Con mal irgendwo da.
Aber ich weiß nicht genau, wann das war.
Naja.
Wie auch immer.
Ja.
Tja, was haben wir denn sonst noch an Neuigkeiten?
Python 3.8.
Ja, ist draußen.
Es gibt ein paar ganz interessante
Geschichten, die dabei sind.
Ja, ist jetzt auch nicht so wahnsinnig umwerfende
neue Geschichte. Es gibt ein bisschen neue Syntax.
Ich weiß nicht, vielleicht fangen wir damit am besten
mal an. Es gibt den
Walrus Operator.
Eine Assignment Expression.
Ja. Was ist das?
Das ist eine Expression,
die vorher nur ein Statement war.
Ja, das verstehe ich. Kein Anfänger.
Ja.
Also on the fly wird etwas zugewiesen.
Ja, man kann damit
Zeilen sparen. Voll gut.
Also man muss nicht erst was definieren,
sondern man kann quasi in der Frage was definieren.
Ja, also ein Fall, den man ganz
oft hat, vielleicht ist es am einfachsten,
das an dem Beispiel zu erklären, ist, dass man
irgendwie sich zum Beispiel
irgendeinen Wert aus einem Dict oder so
holt und dann damit irgendwas macht,
aber das eigentlich auch nur dann machen
möchte, wenn es tatsächlich
da drin ist. Also was man dann üblicherweise
macht, ist, man macht Sache Dict.get
und dann überprüft man halt,
ob das, was zurückgekommen ist, ein None war oder
nicht. Und das kann man sich jetzt
quasi sparen und das halt in einer Zeile
hinschreiben. Und da das relativ oft auftritt,
spart es halt schon ganz ordentlich Zeilen.
Man kann halt, ja, eben
sozusagen if und dann halt
die Variable, die man zuweisen möchte, Doppelpunkt gleich
und dann könnte man sowas
Also if, keine Ahnung, key, Doppelpunkt
gleich, dick, get, bla,
dann
Value eher, nicht key, aber genau, dann
macht man irgendwas
und in dem Fall, wenn es halt nicht drin ist, dann
würde man
da gar nicht reinspringen in den Block.
Ein anderer Fall, wo man
es gut anwenden kann, sind halt
Wildschleifen, wo du irgendeine
Arbeitsvariable belegst und
du
das einmal am Anfang halt gleich
zusammenfassen kannst. Dann kannst du sagen,
hier geht die nächste Runde von der While-Schleife
los. Dann sagst du while
x-Doppelpunkt gleich
deine Expression und
das
Das ist ja fast wie ein Repeat-Until.
Ja,
nein.
Warum nicht?
Weil es ja immer noch im Kopf ausgeführt wird. Das wurde ja mal
am Anfang gemacht. Ja, okay, also tatsächlich.
Du hast halt für den Einstieg in die Schleife
hast du es dann immer noch trotzdem
muss es homogen sein.
Ja.
Und ansonsten, was wir auch mal bei regulären Ausdrücken
ist auch oft so, dass man dann halt ein Match-Objekt
zurückbekommt, wenn es halt irgendwie gematcht hat oder ansonsten
halt none und das geht halt dann auch so, dass man
das halt deutlich
ein bisschen einfacher hinschreiben kann.
Also ist für manche Fälle ganz praktisch.
Es ist halt nicht nur zum Zeilensparen, sondern
die Lesbarkeit ist manchmal halt einfach angenehmer, wenn
du momentan
Dinge erst an eine Variable
binden musst, um sie dann
auszuwerten. Und aber
eigentlich würdest du es vom
Lesefluss her gerne
zusammengeschrieben haben. In den Fällen
wäre das halt was, was du gut reinlegen kannst.
Also alle sind begeistert
vom neuen Assignment-Operator?
Nee, das kann man nicht sagen.
Nein, überhaupt nicht.
Hört es sich gerade bei euch an?
Es gibt halt so drei, vier
Fälle und ich glaube, das ist ein
Ausdruck von
dem
deutschen Begriff für Maturity,
von der Ausgereiftheit von Python.
Python ist ja
in Summe vollständig. Es gibt ja wenig
Dinge, die einem so die ganze Zeit irgendwie
im Weg rumstehen, dass man sagt, oh, bevor das
nicht geht, kann ich Python nicht benutzen.
Das muss man ja nicht hier stehen.
Aber es gibt immer mal den einen oder anderen
Fall, der dann doch auch in der Diskussion,
in der Wars Operator war, lange
diskutiert worden, glaube ich.
Ich weiß gerade nicht.
wie du dann sagst, so nö, ich mach das mal ohne mich.
Ja, möglich, ja.
Und es ist halt immer, wenn man sagt,
Python soll halt nachher auch gut zu lesen sein,
dann ist es natürlich schön, sich über die Zeit halt auch Gedanken zu machen,
ob bestimmte syntaktische Ergänzungen Sinn machen,
auch wenn man sie nicht ständig braucht.
Das ist immer ein bisschen blöd, weil ein größerer Sprachumfang heißt,
komplexere Interpreter, also mehr Möglichkeiten,
dass irgendwas kaputt geht, gerade jetzt in dem Fall.
das ist jetzt ein Feature,
wo etwas, das vorher nur in Statements
ging, jetzt auch in Expressions ging. Das heißt,
da müssen in Zukunft im Sprachdesign auch drauf aufgepasst
werden, wenn am Scoping
oder an ähnlichen Dingen was geändert
wird, dass das dann halt auch in einem
in der Expression halt auseinander
fliegen kann. Das muss man
gut abwägen. Aber in Summe
offensichtlich hat man sich ja geeinigt und gesagt,
das ist es uns wert.
Also ich finde es aber doof, wenn ich das jetzt richtig verstanden habe.
Nö, also ich finde es tatsächlich
ganz nett, aber ich weiß auch, dass es
irgendwie sehr kontrovers diskutiert wurde
und dass es halt Leute gibt, die das hassen.
Und
was auch irgendwie in gewisser Weise nachvollziehbar
ist, also, aber, ja,
hm,
wir werden wahrscheinlich irgendwann in ein paar Jahren
wissen, ob das eine super Idee war oder total doof,
keine Ahnung.
Vielleicht schenken sich jetzt wieder ganz viele Anfänger ab und so.
Ich meine, die Gefahr ist tatsächlich immer,
dass wenn, aber Python hat
eigentlich, was die Lernkurve angeht, einen ganz angenehmen
Vektor, dass
Leute sozusagen zu früh auf
zu spezielle Fälle sich einschießen
und dann meinen, sie müssen den
Voice Operator rechts und links an allen Ecken und Enden
einsetzen. Es ist aber mehr
dieses Thema, dass man halt, Python ist halt
nun mal eine idiomatische Sprache, das heißt,
es ist eine Sprache, die es daraufhin designt, dass man
sich ähnlich wie eine natürliche Sprache auch
so mit ihr auseinandersetzt und
bestimmte Wendungen in bestimmten Situationen
halt einsetzt und in bestimmten Situationen halt
nicht. Deswegen gibt es halt,
wenn man im Fernsehen ein Wort mit F sagt,
dann irgendwann ein Piepsen.
Und in einem anderen Kontext kann man das halt einsetzen und das ist halt, da ist Python, Raymond Hettinger sagt an der Stelle immer gerne, Python ist halt eine Sprache für Erwachsene, du musst halt wissen, was du tust und so ist es auch mit allen professionellen Werkzeugen oder auch mit Power Tools, klar kannst du dir halt den Finger bohren, deswegen solltest du halt wissen, was du tust.
Eine Bohrmaschine bitte nicht anfassen.
Ja, genau.
Nicht direkt auf die Hand zielen.
Vielleicht auch bei anderen liebenswichtigen Organen auslassen.
Ja, ja, genau.
Aber also der
Bohrmaschine ist ein Punkt, da kommen wir
nachher vielleicht ganz zum Schluss, wenn wir unser
Rattenloch-Thema finden.
Ist tatsächlich ein Aspekt, mit
dem ich halt in letzter Zeit öfter
mal gehadert hatte, weil ich habe
einen Anwendungsfall, wo ich ständig
etwas
sowohl
verwenden, als auch zuweisen
möchte. Und das ist halt
schwierig.
Ja, jetzt geht's.
Und
insofern, ich habe ganz persönlich eben
den Anmerkungswunsch gesagt, da wird es dann interessant
werden. Ich habe ja das
Thema, dass, bevor ich halt sagen kann,
in meiner Library unterstütze ich halt
alles nur noch ab Python 3 aufwärts.
Das wird halt noch eine Weile
sein. Ich bin halt mehr in der Spanne
3.5 bis 3.8 halt momentan.
aber das ist zumindest halt am Horizont erkennbar, ja.
Ja, also
mit 3.8 werden wir das mal weitermachen wollen.
Ja, genau.
Also was ich, wo ich doof gestolpert bin, es gibt einen blöden
Bug jetzt mit Jupiter und zwar
fliegt das unter Windows einem um die Ohren,
wenn man versucht so einen Notebook aufzumachen.
Geht einfach aus bei 3.8.0,
das ist natürlich wahnsinnig so toll.
Aber es gibt einen Fix, man kann nämlich einfach
in Tornado, was da
wie quer schießt, Asung.io
anpassen, also unter Tornado-Plattform Asung.io
irgendwie in deren Zeit-Packages
drin und kann da einen kleinen
Codeschimpfsel eintragen, Import Assoc.io und dann
den Event-Loop-Policy ansetzen
auf, ja, den
Windows-Selector-Event-Loop
und dann geht's wieder. Das ist ein bisschen hakelig,
aber ich hab gehört, das soll irgendwann gefixt werden
in 3.8.1 oder so.
Ja, nur für alle, die vielleicht drüber gestorben sind
und sich gewundert haben, warum das nicht geht.
Ja, das ist natürlich schon so ein bisschen bitter,
wenn das dann wieder alle Notebooks auf,
na gut, wer benutzt denn Twitter-Notebooks auf Windows?
Das ist,
Ja, ich glaube, das ist tatsächlich
bei einigen Menschen.
Ist der Trigger gewesen, weil die Default-Policy
geändert wurde für das Async-Io in Windows?
Möglicherweise. Ich habe keine Ahnung
über den Grund, muss ich ehrlich gestehen. Ich habe einfach nur diesen Fix
gefunden und gedacht, okay, ich probiere es mal aus.
Und dann ging es tatsächlich wieder.
Also irgendwas war da mit Async-Io kaputt.
Ich weiß nicht, die haben, glaube ich, bei 3.8 auch was mit Async-Io verändert
bei dem Verhalten.
Und da kann es gut sein, dass da irgendwas geändert worden ist.
Also ich meine auch im Kopf zu haben,
dass über dieses Thema,
welche Loops, wo Default
sind, dass da
was passiert ist, kann halt sein,
dass da jetzt irgendeine, ja.
Ja, es ist was kaputt gegangen und das ging dann nicht mehr
und dann, ja, bin gespannt.
Das hat ein bisschen Gehäude
verursacht, irgendwie online.
Ja, ich bin auch noch nicht wirklich umgestiegen,
weil halt viele der Data Science-Geschichten
noch nicht, also ich
könnte gar nicht wirklich umsteigen,
weil eben so lange sowas wie OpenCV
und solche Sachen noch nicht
wirklich, also ich glaube, heute ist Pandas
in Conda
Conda Forge
oder auch schon in der offiziellen
Conda Distribution mit drin
irgendwie für Python 3.8,
aber es gibt halt noch jede Menge
Pakete, die noch nicht gebaut, also
oft ist es, es muss einfach nur nochmal neu
gebaut werden und dann geht's, aber
manche Sachen brauchen halt auch so ein bisschen mehr
Aufwand und
ja, daher hänge ich da immer so ein bisschen
hinterher hinter den aktuellsten
Python-Versionen.
Das fand ich auch spannend, da hattest du zu dem Thema nämlich auch Hinec einen 1-2-3-Tweets losgelassen zum Thema Wheelbuilding auf 3.8, dass er halt jetzt so lange die ganzen, also Hinec ist ja in der Community auch relativ gut bekannt um das ganze Security, Packaging, da ist er relativ aktiv und schreibt Blogposts und macht immer gute Vorträge und ihm ist halt auch aufgefallen, dass jetzt halt wieder so eine Phase einsetzt von die ganzen Wheels,
sind alle noch nicht gebaut und er hat sich in seinen
Deployments stark darauf verlassen, dass seine
Buildtimes im Prinzip relativ
schlank sind, weil er halt überall Reels einsammeln kann
und jetzt geht es halt, gehen halt überall die
Compiler-Orgien los und du hast irgendwie
eine Verzehn-, Zwanzigfachung
deiner Compile-Time.
Da war er dann auch nicht so happy
in der Kombination mit, dass die
Release-Kadenz ja dann noch angepasst
wurde.
Ja, das stimmt, das ist jetzt schneller.
Ja, jetzt haben sie es von
18 auf 12 Monate runtergesetzt,
wobei die Support-Zeiten die gleichen
sind. Also jetzt müssen sie mehr Branches
noch supporten.
Aber
das ist halt auch eine oder sowas, die dann,
wenn man die Einkürzung von 18 auf 12
mal hochrechnet, glaube ich, mehr wird's
nicht.
Was sagt eigentlich
die Uhr für Python 2.7.
Es sind noch
31 plus 30
plus 26 sind
noch 57
Tage.
Dann ist rum aus vorbei mit Python
2.7.
Eigentlich wäre es jetzt allmählich mal so
an der Zeit, die Landingpages hochzufahren
und AdWords zu buchen auf
Consulting für
Python 2.
Gleichzeitig mit der Abstellung der Streitumstellung.
Ja, die haben sie ja verschoben.
Da kannst du in zwei Jahren
separate Consulting-Aufträge draus machen.
Na gut.
Ich meine, was tatsächlich interessant ist,
die Aussage von der Python Software Foundation
ist ja auch,
wenn du von deinem Vendor im Stich gelassen bist,
dann such dir halt Consultants.
Hier gibt es Leute,
die offerieren dir auch danach noch Support für Python 2.
Es ist halt nur die Aussage mit
also kostenlosen Support von den
Kernentwicklern, da ist jetzt mal endlich
der Zopf abgeschnitten. Die kümmern sich um
ausreichend Dinge, die müssen sich nicht auch
noch umveraltet beiseiten.
Legacy-Stuff. Ja, also die haben sich
wirklich lange, die haben jetzt wirklich 10 Jahre
noch länger, ich weiß es
gerade nicht. Und also, da gibt es
Consultants, die da auch beworben werden, tatsächlich von
der PSF, die pflegen Immunliste.
Also Jochen, wenn du da noch
noch Kapazitäten frei
kannst, die eintragen.
Ich habe selber
ich habe selber gerade mein
eines großes Projekt
mal noch schnell just in time
auf Python 3 umgestellt
war wirklich auch erstaunt
ob der
in Summe Geschmeidigkeit, also ich meine
seit 10 Jahren die Aussage ist
schreib halt Tests für deine Sachen
dann kannst du halt nämlich danach gucken, ob die
Tests wieder gehen und
also ich bin glaube ich jetzt bei einem
Projekt, was relativ komplex ist
und ich glaube es waren 6.000 Zeilen
6.000 Zeilen war ich
in der Umsetzung mit, glaube ich,
zehn Stunden Arbeit in Summe dabei.
Und dann waren die Tests alle wieder okay.
Und es tat erstmal sinnvolle Dinge.
Und tatsächlich, das
Pipe-2-to-3-Tool hat mir extrem viel
weggefuttert. Das hat gut funktioniert.
Und wenn man viel I.O. macht,
muss man halt eine Weile lang am Unicode rumschrauben
und dann geht's halt.
Nee, war ich jetzt
eigentlich überrascht, dass das
doch ziemlich geschmeidig ging. Hatte ich
irgendwie mit mehr Knöchel gerechnet.
Ich hab letztens, hatten wir eine schöne Diskussion
dafür im Channel, was dabei noch
schiefgegangen ist. Und zwar haben sie das Rundungsverfahren
geändert und dann ging
kaufmännisches Runden irgendwie auf einmal anders.
Und da war auch die Frage, was dann
Pi 2, 3, 2, 2, 3
macht.
An der Stelle, das wusste ich auch nicht.
Ja, wenn das wichtig für dich ist, dann kannst du dir das
zum Glück anpassen.
Ja, aber das war tatsächlich spannend.
Ja.
2, 2, 3 ist ja pluggable mit den Fixern,
die da drin sind.
Also wenn man selber wirklich
eine große Code-Basis noch haben sollte,
die man noch nicht mal angefasst hat.
Aber dann ist man, glaube ich, auch nicht derjenige,
der Custom-Fixer schreibt.
Ja.
Ja, da hat man sich wahrscheinlich dann schon länger nicht mehr so wirklich
dafür interessiert, wie das da weitergeht.
Ja.
Ja, aber es ist jetzt auch mal,
ich bin mal gespannt, wie viel Schmerzen das
verursachen wird. Ich meine, es gibt ja auch dann größere Institutionen,
die dann noch Support anbieten.
Ich glaube, Red Hat hat auch irgendwie gesagt,
dass sie einen Python 2 Fork weiter maintainen wollen oder so.
Oh, sehr gut.
Wenn die umgeforgt sind, haben wir auch alle den neuen Fork von Red Hat.
Dann kann ich auch in fünf Jahren nach einem Python 2.7
auf einen 3.6er Kernel fahren.
Ja, Softwarearchäologie.
Ja, genau, lebende Archäologie.
Ja.
Sehr schön.
Genau, ja, das war...
Was kommt eigentlich nach Python 3.8 und 3.9?
Kommt dann 3.10 oder kommt dann 4?
3.10.
Außer sie ziehen das Argument wie Linus, der sagt,
Versionsnummern haben in dieser Hinsicht für mich keine Bedeutung
und ich mache ab irgendeinem Cut einfach.
Aber die zweite Stelle kann ja auch zweistellig werden.
Das ist ja nicht das Thema.
Und jetzt, wo man die Leute schon von 2 zu 3 so erschreckt hat,
wartet man da jetzt noch ein bisschen.
Ich mag die, ich wäre das ein Selbstmord.
Ich meine, was bei 3.8 noch dazukam,
das ist noch ganz interessant, aber auch wieder so eine
Kleinigkeit ähnlich wie beim Boris Operator
sind die Positional Only
Arguments. Oh ja, genau.
Bisher kann ich ja
in dieser Kombination
aus
Argumenten, die ich in einer bestimmten
Reihenfolge ohne Namen oder
mit Namen in einer beliebigen Reihenfolge
und unbenahmt
nach Reihenfolge und
benahmt ohne Vorankündigung
in diesen ganzen dynamischen
Varianten zu wissen kann,
kann ich momentan nicht verhindern,
dass jemand mir
ein Positionsargument halt auch
mit Namen angibt und das
gibt es jetzt tatsächlich als neues Ding,
dass man
markieren kann, dass Argumente wirklich nur
positional übergeben werden dürfen.
Wobei ich tatsächlich auch
zugeben muss, zum einen da ist mir tatsächlich
der Syntaxanteil eher zum Abgewöhnen.
Warum macht man das?
Was gibt es da für einen Grund für?
Den habe ich tatsächlich gerade auch nicht greifbar.
Ich weiß es nicht so genau.
Eben auf der
PyCon war halt auch ein
Talk über diese Änderungen und da hat
jemand ein Beispiel gebracht irgendwie mit Potenzieren,
dass das da irgendwie
ein Böse beißen kann. Ich kriege es
jetzt glaube ich auch nicht so wirklich auf die Reihe,
was da das Problem war. Aber im Grunde ist
halt das
Blöde, dass
ja, wenn
du halt nicht so richtig erwartest, dass wenn du
irgendwie ein Keyword-Argument
halt übergibst, dass das dann halt als
Positionsargument auch reinkommen
kann und dann sozusagen
vielleicht einfach Dinge
in der falschen, im falschen
Hals irgendwie dazu landen.
Ja, was passieren kann, ist
wenn du ein,
da weiß ich aber auch nicht, was momentan der Effekt wäre,
aber du kannst solche Sachen bauen, wenn du
zum Beispiel halt durch
Stern und Sternstern
Dicts übergibst und in dem Dict ist
etwas drin, was eigentlich ein Positionsargument
wäre, dann könntest du das damit ersetzen.
Das heißt, wenn es
zwei
ja, aber
da würde sich eigentlich Python jetzt schon
gegen wehren, wenn du
ein Positionsargument namens
a per Position übergibst
und dann im Dict nochmal ein a mit drinstehen
hast als Sternstern-Keyword-Argument,
da würde
sich eigentlich schon gegen wehren und sagen, das geht so
nicht.
Aber für mich ist es ein bisschen so ein Ding ähnlich wie du bei Command-Line-Tools häufig, wenn du hintergelagerte Prozesse stoppen möchtest, so Stop-Dämmen-mäßig, und du willst an denen auch noch Argumente übergeben, dann hast du manchmal auf der Command-Line so ein Doppel-Minus, um zu sagen, hier ist das Ende von den Argumenten, die ich kriege, und hier gehen die Argumente los, die an den nächsten weitergegeben werden, damit die Parser nicht durcheinander kommen.
Und so in dieser Kategorie ist das für mich halt auch angesiedelt. Nur diese syntaktische Auswahl, dass du dann halt neben den bisher schon Sternchen in der Funktionsdeklaration jetzt noch einen Slash als bedeutungstragendes Element hast. Ich weiß gar nicht, ist der Doppelslash auch belegt für die Keyword-Arguments oder sowas?
Nee, ich war nicht nur der Slash.
Aber das sieht...
Meine Ästhetik ist
arg verletzt, ja.
Ja, und wenn man
halt nicht weiß, dass das... Ich meine, es ist sowieso,
denke ich, für Leute, die damit
anfangen... Also die Stern- und Doppelstern-
Geschichten sind schon so...
Was passieren hier für magische Sachen?
Aber der Slash ist auch nochmal...
Da kann ich mir auch gut vorstellen, dass da Leute
ein bisschen verwirrt werden.
Aber naja, ich meine, die meisten Leute
werden das ja auch nie zu sehen kriegen. Also das ist halt
etwas, was man halt dann macht, wenn
man muss, aber ansonsten
ja.
Ja, das ist
auf jeden Fall auch eine interessante Geschichte.
Genau, dann... Das nächste Ding für Python 3.8.
Bitte? Das nächste Ding für Python 3.8.
Wir brauchen eine Chapter Mark.
Ja, das muss ich mir
sagen, ich glaube, ich habe es sowieso verpeilt.
Ich weiß nicht, Reaper macht
die Chapter Marks manchmal an den Anfang, wenn man das irgendwie
falsch einschaltet. Warum haben wir eigentlich noch keinen Button, den wir irgendwie
mit dem Respy-Store haben? Genau, ja, ja.
Das haben wir auch mal vor.
Genau, muss ich mal irgendwie
mich mit bestätigen.
Vielleicht ist er jetzt irgendwie im Jahreswechsel.
Ich muss mal einen Buzzer kaufen und dann gucken wir mal
so ein Interface.
Gibt es eigentlich eine API für Reaper?
Ja, man kann da solche Dinge reinhängen.
Das ist tatsächlich alles möglich.
Ja, genau.
Schöne Geschichte. Also ich finde das
total toll. Ich weiß nicht, ob andere Leute das
auch gut finden.
Aber für Multiprozessing gibt es jetzt so
Shared-Memory-Geschichten automatisch.
wenn man
so Arbeit verteilen möchte auf mehrere
Prozesse, was man manchmal muss, wenn man zum Beispiel
ja auch irgendwie CPU-Power
haben möchte, dann geht das ja wegen
Global Interpreter Log nicht so
wirklich mit Threads und
dann startet man halt mehrere Prozesse, das ist halt die Lösung dafür,
dann hat man aber das Problem, dass man, wenn man
jetzt eine Funktion sozusagen,
also eine Funktion mit unterschiedlichen Parametern
in fünf unterschiedlichen Prozessen ausgeführt
haben möchte, dass man irgendwie diese
Parameter, die man der Funktion übergibt, halt irgendwie
in diese Prozesse reinbekommen
muss. Und da kann man
natürlich
einfach irgendwie die Sachen picklen,
oder das funktioniert auch, ich glaube, sie werden auch
per Default gepickelt.
Aber
wenn man jetzt irgendwie was
übergibt, zum Beispiel halt auch gerade bei so
Data Science-Geschichten, irgendwie
große NumPy-Arrays oder so, die halt
so groß sind, dass ich die nicht fünfmal
in den Hauptspeicher packen kann,
dann habe ich halt ein Problem, weil
geht halt einfach nicht mehr.
Und das,
was man dann machen konnte,
ist aber eine ganz schöne Fummelei,
ist, man macht halt einfach ein Shared Memory
Segment, was halt alle
irgendwie, auf das halt alle Prozesse zugreifen
und, also man
kann dann so Dinge machen, man nimmt halt
irgendwie Struct, das in der
Standardbibliothek, das Modul und baut
sich dann halt so eine binäre Datenstruktur zusammen
in ein Shared Memory Segment und dann
lädt man das in den Prozessen halt irgendwie,
greift man darauf zu und dann hat man halt auch sozusagen
die Daten übergeben, ohne dass man da
irgendwie
das picken muss.
Aber das ist halt schon,
ich würde mal sagen, dass die meisten Leute
das ist schon auch ganz schön wild
und würden das nicht so machen
wollen und jetzt gibt es halt eine Geschichte, die halt
automatisch drin ist und man muss sich selber nicht drum kümmern und
wenn man die Daten,
alle Prozesse, die man aufruft, die gleichen
Daten verwenden sollen, dann kann man sagen, so
hier in diesem Schatten der Musik, wenn das ist drin und dann
kriegen die das und das ist
natürlich schon ziemlich cool.
Einen habe ich noch, es gibt
noch ein kleines Ding, das war vielleicht sogar
den meisten nicht aufgefallen, es gab noch
einen, eigentlich
war es ein Bug, aber
hat jetzt eine Weile gedauert und zwar
Unpacking, also wenn ich
Listen-Elemente
an einen
an einen Wert
antackern möchte.
Also ich kann zum Beispiel einen Tupel
haben, da sind irgendwie die Zahlen 4, 5, 6
drin und wenn ich das jetzt einem
neues Tupel zuweisen möchte, kann ich
dann wieder sagen, T ist gleich
1, 2, 3
Sternen, mein bestehendes Tupel, um
die dann halt schön zu vermischen.
Das konnte man bisher
machen, aber das konnte man
nicht benutzen, wenn man eine Expression hatte,
die an einen Return oder an einen Yield ging.
Ein sehr seltenes Ding, aber das ist gerade, wenn man so funktionale Sachen hat, Generatoren und so ein Zeug, wo man irgendwas dynamisch ausgerechnet ist, mit was Statischem verknüpfen möchte, dann sind diese Unpackings manchmal sehr angenehm und die musste man momentan immer über mehrere Zeilen verteilen.
Es wird auch dargestellt, als eigentlich war es ein unintentional behavior seit Python 3.2 und jetzt ist es nicht mehr.
Oh, ja, ich weiß nicht,
hab ich noch was vergessen, Python 3.8?
Es gibt noch die Audithooks
irgendwie. Ja, was ist das denn?
Was ist ein Audit?
Fangen wir doch erstmal so an.
Also von Python jetzt.
Du kannst halt dich irgendwo reinklingen
und dann Notifizierung liegen,
wenn so bestimmte Sachen passieren.
Aber ehrlich gesagt, das ist jetzt natürlich so ein bisschen zu allgemein.
Ich weiß nicht genau...
Ein Debugger über die Python-Runtime bauen, das hört sich komisch an.
Ja.
Ich habe es mir tatsächlich auch noch nicht angeguckt,
aber es kann sein, dass etwas, was ich schon eine Weile haben wollte,
das Spannende ist, die Hooks können nämlich zum einen halt von außen reingegeben werden,
dass ich die, wenn ich jemandem eine Python-Runtime zur Verfügung stelle,
also als Hosting-Provider
oder als Plattform-Provider
kann es interessant sein, dass ich die
forcieren kann. Und also
ein Thema, und da ist nämlich letztens der Bug, den ich
vor 14 Jahren eingesteuert
habe,
zugemacht worden mit
das geht jetzt irgendwie anders, und da muss ich mal
reinschauen, war, dass Python
zum Beispiel, wenn ihm der Speicher
ausgeht, kriegst du, kriegt dein
Python-Programm halt einen
Memory-Error,
dass er keinen Speicher mehr alle
integrieren kann und dann kannst du
sozusagen nochmal versuchen, sinnvolle Dinge zu tun.
Das Problem ist, es gibt
einige Programme, gerade so Server, die
laufen und haben
und der Memory Error ist halt keine
System Exception, sondern es ist halt eine
Exception, das heißt, die wird
von einem normalen
Try Accept
auf Exception auch abgefangen
und wenn du halt einen Server hast und
deine Anwendung läuft in Speicherprobleme,
Das klingt lustig.
Ja, dann kriegt der Mainloop halt für den, keine Ahnung, für die HTTP-Anfrage, was auch immer, kriegt der Mainloop halt dann einmal einen Memory-Error, wirft einen 500er-Fehler dem Client gegenüber und nimmt die nächste Anfrage entgegen.
Und wenn sich aber ein Programm halt dermaßen in die Ecke manövriert hat, die räumen ja normalerweise nicht ordentlich in sich auf und da wäre es mir lieber, wenn ich halt von außen eben sowas beobachten könnte und sagen kann, hey, in dem Fall mach bitte, mach den Python-Prozess einfach aus, lass ihn neu starten von Supervisor, SystemD oder wem auch immer, weil besser wird es nicht mehr.
Also da haben wir relativ lange Probleme.
Kann man durch eine Speicherecke, in die niemand hin will oder sowas oder in der du irgendwas machen kannst, wo du nicht hin sollst?
Nee, einfach nur, wenn der Sprecher halt voll ist. Das kommt halt auch bei größeren Kisten halt mal vor. Bei Java ist das immer noch ein bisschen härter, da gibt es ein ähnliches Problem mit diesem, wie der Heap alloziiert wird und bei Python ist es halt so, das brauchst du nicht konfigurieren, aber wenn er oben am Limit anschlägt, dann hast du so ein halbgares Programm, das reagiert meistens halt in irgendwelchen Health-Checks auch gerade noch so von, ich bin einsatzfähig, aber wenn es irgendwas Sinnvolles tun soll, fliegt es halt ständig auf die Nase.
Da haben wir uns lange mit rumgeschlagen.
Und da kam jetzt irgendwie die Info mit,
hey, das könnt ihr jetzt irgendwie von außen steuern.
Aber ich glaube, das sind nicht die Audit-Hooks.
Das ist irgendwas in der Nähe noch.
Ja, ich weiß nicht.
Also man kann hier,
also ich habe hier auch gerade noch in den Pepp geguckt,
was man da, also man kann an sehr vielen Stellen
sozusagen sich so einen Hook setzen,
wo man dann sagt, okay, wenn das passiert,
dann möchte ich benachrichtigt werden
und dann irgendwie darauf reagieren.
Und das, ja,
aber ich habe es mir ehrlich gesagt auch noch nicht so genau.
Direkt E-Mail an den Admin.
Tja, genau.
Ansonsten, ich weiß nicht so genau.
Haben wir noch irgendwas in 3.8, was
irgendwie interessant wäre?
I don't know.
Nee, ich glaube also.
Nee, beim drüberfliegen waren das jetzt so die Sachen,
die ich mir rausgesucht hatte.
Ja gut, dann können wir die Liste auch wieder
abhaken.
Python 3.8 irgendwie durch.
Ja.
Dann hat man noch den
Core-Sprint.
Oh ja, du wolltest noch was erzählen von einem Core-Sprint.
Erstmal vielleicht kurz, was ist ein Core-Sprint?
Also geht es um die Core-Developer, sind das
eigentliche große, die Gurus
von Python, die Entwicklerteams, die am Kern der
Sprache arbeiten, ist das richtig?
Ja, genau. Und
also typischerweise, die nutzen
halt schon auch die Gelegenheit, wenn sie können,
dass sie sich mal treffen und
diesmal war es jetzt vom
das ist jetzt vier Wochen her, 9. bis 13. September,
schon auch relativ
lang, fünf Tage, vier Tage,
haben sich 34 Leute getroffen,
große Gruppe, viele Langzeitleute,
aber das Kernteam hat sich auch in den letzten
Jahren extrem gut diversifiziert.
Also viele
Leute auch aus unterschiedlichen Ländern,
unterschiedlichen Hintergründen, das ist
eigentlich gut gewesen und die haben einen Haufen
Pull-Requests verarbeitet, 120 Stück
haben sie gesagt
und da wurde dann auch der
Python 3 neuen Release Schedule und jetzt die neue
12-Monats-Kadenz beschlossen.
Und
da machen sie auch viele mal
eine Infrastruktur, also der Bug-Tracker wird noch mal
angeguckt und
solche Dinge.
Und ein, zwei Sachen,
die sind mir aber dann konkret noch mal genauer
aufgefallen. Das eine ist,
es wird mal wieder am Grill rumgedoktert.
Ich weiß nicht, ob wir den im
Cast schon hatten.
Der Global Interpreter, das ist einer der ersten Folgen.
Vielleicht nochmal kurz anreichen für alle Menschen,
die das als erstes hören oder so.
Ja, das ist der Global Interpreter Lock
und das ist halt, um
zu verhindern, dass nicht-synchronisierte
Datenstrukturen auf C-Ebene
sich auf den Füßen rumtreten
und das ist der Grund, warum halt der
immer nur ein Statement
verarbeitet werden kann gleichzeitig
und ich mit Multithreading
in Python halt auch immer nur
eine CPU auslasten kann.
Und Jochen hatte jetzt gerade schon gesagt, dass es ja jetzt besseres Shared Memory Management auf der einen Seite gibt und das ist mir nämlich dann beim Durchgucken von dem Sprint auch aufgefallen, die Arbeit scheint noch in eine andere Richtung zu gehen, nämlich dass man, um den Gildum rumzugehen, mehrere Python-Interpreter in einem C-Prozess haben kann.
Und das ging bisher auch schon, der Interpreter war selber ein Objekt, was man, ich weiß gar nicht, ob man tatsächlich mehrere Interpreter starten konnte, die Ecke fasse ich einfach zu selten an, aber auf jeden Fall arbeiten sie jetzt dran, dass es so umgearbeitet wird, dass mehrere Interpreter im Prozess jeder seinen eigenen Global Interpreter-Log kriegt.
Und ich meine, das ist von der Arbeit her relativ logisch, was da zu tun ist.
Es ist ein C-Programm, da gibt es halt, wenn man nicht aufpasst, globalen Scope, globale Variablen und die müssen Sie jetzt im Prinzip einmal komplett alle wegputzen,
dass alle Daten, die irgendwas mit dem Interpreter zu tun haben, nicht globale Variablen sind, sondern dass die alle an eine Interpreterinstanz dran getackert werden.
Und dann haben wir nämlich
tatsächlich die Chance, Python-Code
in einem Prozess über
mehrere Threads parallel
auszuführen. Und wenn man dann nämlich wieder
die Techniken ins Spiel bringt zum Thema
Shared Memory,
dann geht das vielleicht sogar
tatsächlich auch ganz gut leichtgewichtig.
Und das klingt jetzt nach so einem
ganz
Kunstgriff, anstatt
den GIL loszuwerden
oder den Interpreter an der Stelle da weiter
aufzubohren, einfach zu sagen, komm, dann
mehrere Interpreter parallel,
wir dröseln die Datenstrukturen so
auf und dann kann halt jeder Interpreter
in unterschiedlichen Prozessen
laufen und siehe da,
wir sind in der Lage, mit einem Prozess mehr CPUs
auszulasten. Also das wäre tatsächlich
nochmal, finde ich, ein interessanter Ansatz.
Ja,
das klingt tatsächlich sehr interessant.
Ja, gerade wo jetzt die Kerne so mehr zunehmen,
Ja, das ist natürlich auch so ein Dauerthema, wobei ich meine, die Fälle, wo man das wirklich, wirklich braucht, sind auch eher so beschränkt, würde ich mal sagen, weil die meisten Leute ja nicht, also ich meine, dass man CPU und, also dass man IOMultiplexen will, das kommt schon häufig vor, aber dass man das gleichzeitig mit viel CPU-Verbrauch macht, also wenn man nicht gerade einen Datenbank-Server schreibt oder so, würde ich jetzt sagen, gar nicht so super häufig.
Nee, du willst ja immer
eigentlich auch über mehr Prozesse skalieren können.
Ja, klar. Natürlich.
Ja.
Genau, ich glaube,
der Grund, warum das mit dem
GIL halt so ein Problem ist, ist auch da irgendwie das,
wie Python den Hauptspeicher
verwaltet, ist da
so ein Riesenproblem, weil
das Reference-Counting, man müsste das alles
irgendwie locken eigentlich. Also,
es ist jetzt auch so, was ich mal
darüber gehört habe, aber schon wieder
ein bisschen her.
Und das kann man natürlich machen, man kann irgendwie
vorher jeder Operation, die man
irgendwie beim Reference-Routing macht,
sagen, okay, wir locken
das jetzt hier oder halt irgendwie
ja, sozusagen den Zugriff
dann exklusiv machen, damit sich da irgendwie nichts
überschreibt.
Aber dann wird halt,
wenn man das einfach so macht, glaube ich,
das wird 40 Mal so langsam.
Und dann haben irgendwelche Leute
sehr unheilige Dinge getan und rumgetrickst
und haben es auf Faktor 20 irgendwie runtergekriegt
oder so, wovon schon niemand geglaubt hat, dass das
möglich wäre.
Aber das
ist halt so das Problem. Man kann es halt nicht
also
mit der Art, wie das
Speichermanagement, also mit Reference-Routing funktioniert,
geht das halt wohl
nicht gut. Und ja, die einzige
gute Möglichkeit, also wie es halt weiterhin schnell
bleiben kann, ist, dass man sagt,
nee, es gibt nur einen
Thread, der halt irgendwie daran Dinge
am Reference-Routing ändern kann.
Ja, dafür braucht man halt den GIL irgendwie.
Aber ja, also das mit den mehreren Interpretern,
das klingt auch sehr interessant. Also da bin ich mal
gespannt.
Weil das ist ja auch mal so ein Standard-Argument,
was an Python halt nicht so toll ist
gegenüber anderen.
Was aber auch für den
Alltag gar kein
Problem ist.
Nicht wirklich, nein.
Und das ist ja auch gerade das Tooling über
Multiprocessing ist halt inzwischen extrem
geschmeidig geworden. Sowohl, also auf der einen
Seite halt für I.O., Multiplexing ist
Async I.O. extrem angenehm
geworden und mit
Multiprocessing und so Prozesse starten,
das tut
meistens,
tut vor allem auf eine Art und
Weise, wo man weniger
scharf nachdenken muss.
Threads haben halt das Problem, das wissen wir seit
20 Jahren, dass du dir ganz
schnell halt in den Fuß schießt und
Dinge passieren, die du nicht willst
und wenn du es halt über so Prozesse
auftrennst, hast du eine klare I.O.-Grenze
und wenn du async.io machst, dann hast du halt
eben das Thema, dass du selber bestimmst,
wann du die Kontrolle über
deinen Code-Pfad abgibst
und wann nicht.
Ich glaube, das ist nochmal so eine eigene Folge irgendwie.
Async und Shedding in Python, da haben wir auch gar nicht
genug für gemacht. Das ist auch jedes Mal, glaube ich,
mindestens eine Folge, wahrscheinlich
komplett. Das ist ein alles ziemlich
fette Brocken.
Was mir auffällt, ist, dass man bei async
wahrscheinlich tatsächlich dann,
wenn man das in einer
hier nochmal rausholen möchte,
was, glaube ich, wirklich eine gute Idee ist, dann
müssten wir uns wahrscheinlich was einfallen lassen, um
Code-Beispiele während in den Stream
irgendwie einzubetten.
Ja, genau, das ist natürlich auch so eine
Sache, wie kriegt man das eigentlich gut
hin? Da habe ich auch schon mal drüber nachgedacht, aber
auch noch keine Lösung gefunden. Ich meine,
man könnte natürlich auch irgendwie eine Videogeschichte
dazu machen, aber das ist halt auch irgendwie alles.
Ja, ich höre meinen Meinten.
Ja, genau.
Kann ich noch ein Video einblenden, irgendwo auf der
Frontscheibe von meinem Wagen?
Nee, das widerspricht
irgendwie so dem, wie es benutzt wird.
Ich weiß es auch nicht.
Das muss man mal überlegen. Aber
prinzipiell wäre das natürlich schon eine interessante
Geschichte, dass man das halt
irgendwie dabei hätte. Also
zumindest irgendwie in den Shownotes auf der Website.
So augmentiert. Ja, ich glaube, Bonus ist
glaube ich gleich ausreichend. Wenn jemand nachschauen will, wie das
dann geht, dann haben wir das so als Mini-Tutorial
drin. Wenn sich jemand dann die Mühe machen möchte, das
mitzudokumentieren von uns, dann
ja, reicht ja.
Also Links sind ja dabei, also ich würde sagen,
das passt. Ich weiß, ihr der anderen Meinung seid,
schreibt uns gerne. Also wir sind immer auf euer Feedback.
Oder vielleicht hat jemand schon mal was gesehen,
wo das gut gemacht wurde.
Also ich habe tatsächlich, also das ist irgendwie
so das Level, auf dem ich jetzt noch nicht so ganz angekommen bin,
dass ich halt große Probleme habe, immer noch so
zu verstehen, wann benutze ich denn jetzt was und was ist denn
jetzt überhaupt ein Swett und wann nehme ich den, wann nehme ich jetzt
irgendwie Async und vielleicht doch
irgendwie anderer Taskmanager oder sowas
dazwischen. Das ist noch nicht so ganz angekommen.
Und ich glaube, das wäre auf jeden Fall nochmal spannend
zu verstehen, warum, wieso, weshalb ich denn jetzt welche
Technik an und wann das so best practice ist
für was überhaupt.
Ja, auf jeden Fall.
Ja, eigene Folge.
Ja, der
letzte Punkt, der mir beim
Sprint aufgefallen war, war, dass Guido
jetzt schließt sich so für heute wahrscheinlich
so der Themenkreis ein bisschen,
dass Guido nämlich angefangen hat,
eins der im Kern befindlichsten
Bauteile von Python, nämlich der
Puzzle-Generator für Python selber,
wo er tatsächlich sich
damals
89, 90 und dann
über die 90ern weg
das Herzstück
der Programmierung einer Sprache
nämlich Parser, Compiler
Interpreter
das er damals halt
selbst eingebaut hatte und
er wohl die letzten Jahre immer mal angesprochen
wurde auf einen ganz spezifischen
Typ von Parser
Generator, nämlich einen sogenannten Pack-Parser
da hat er
sich dran gemacht, tatsächlich dieses Stück komplett
noch mal auseinanderzunehmen, neu aufzubauen,
weil das wohl tatsächlich dann Einfluss hat
auf die später mal Parsing-Performance auf der einen Seite
und aber auch welche Sprachkonstrukte
sich eigentlich wie elegant definieren lassen,
mit wie viel Hex man eigentlich die Sprache definieren muss,
um den Parser dazu zu zwingen, dass er tut, was man will.
Und er hat eine ganze Reihe von Blogposts schon zugeschrieben,
die entstehen gerade noch,
aber er hat immerhin schon mal eine Gesamtübersicht aller, ich glaube, acht oder zehn vorhandenen
und geht immer recht detailliert in der Anwendung durch, in der Motivation
und auch wie das ganz konkret für Python aussieht, was er da wie zusammensetzt.
Das ist ein sehr spannend zu lesendes Thema.
Und das hat mich halt vor allem deshalb beschäftigt,
weil ich die letzten Wochen immer so ein bisschen wieder mit dem Thema zu tun hatte,
für einen bestimmten Anwendungsfall Python nativ zu benutzen oder mit einer DSL
und wenn man DSLs macht,
eine externe oder eine eingebettete.
Eine Domain-Specific-Language.
Also es gibt ein Projekt
von mir, das ist das
Bateau, das ist so ein Deployment-Werkzeug
und da gibt es
sowohl einen deklarativen
Anteil von wie definiere
ich, wie meine Anwendung
deployed werden soll im Allgemeinen
und dann auch so einen imperativen von
ja, wie kommt denn jetzt die Datei auf die Platte und so
und da habe ich
mich damals dafür entschieden, dass ich das innerhalb
von Python mache mit einer reinen
API und Python
ist ja keine Sprache, in der Domain-Specific
Languages so eine große
Rolle spielen. Also in Ruby
ist es ganz typisch, da ist die Syntax
für geeignet, dass du das so
dir zurechtlegst, dass du im Prinzip
etwas hast, das sieht kaum noch nach Ruby aus
und du musst aber keinen eigenen Parser
schreiben, weil du das Ruby so
sozusagen gezüchtet hast,
dass es dann wie was anderes aussieht
und es kommt auch aus den funktionalen
Sprachen aus
Lisp und Scheme, die haben alle ja so Makros
wie auch C, wo du dir dann so
komplexe Makros definieren kannst, dass du
im Prinzip die drunterliegende
Sprache nicht mehr wiedererkennst. Und das ist in Python
aber gar nicht so üblich.
In Python gibt es eher solche,
da nennt man die dann Domain-Specific Libraries,
SQL Alchemy ist so ein Beispiel,
die dir dann einfach
eine sehr fluffige API
liefern, die man benutzen kann
und du nicht das Gefühl hast,
Brüche zu haben zwischen dem, was
Den simplen Anspruch, irgendwie so eine Grammatik zu entwickeln, um die Probleme, die ein bisschen komplexer sind, in einfacherer Logik zu beschreiben.
Ja, und dass du halt auch wenig Brüche hast. Man nennt das halt in der Informatik ein Impedance-Mismatch, wenn du halt bei SQL Alchemy, wenn du SQL hast, dann ist das halt so eine deklarative Sprache und wenn du dann aber diese Statements dynamisch zusammenbauen möchtest, dann hast du halt irgendwann nur noch, ja ich kann irgendwelche Strings generieren, aber dann hast du keine Ahnung mehr, ob die jetzt syntaktisch korrekt sind, ob dir beim Quoting was kaputt geht.
Das nennt man halt einen Impedance-Mismatch, also die Audio-Techniker können das bestimmt auf Deutsch übersetzen, wenn du halt nicht passende Widerstände anschließt. Das hat keinen guten Sound.
Und dafür nehmen viele Umgebungen Embedded Domain-Specific Languages, also die du in die eigentliche Programmiersprache halt einbetten kannst und in Python sind die Libraries eher so das Thema, wie SQL Alchemy oder auch Requests, bei denen einfach die API so geschmeidig gemacht ist, dass du das Gefühl hast, du kannst konzeptionell und syntaktisch, so wie du es runtertippst, auf einer Ebene arbeiten und hast dann nicht ständig Übersetzungsverluste dazwischen.
Und da gibt es tatsächlich inzwischen eine Reihe von, die Pack-Parser kommen halt genau aus diesem Umfeld von, du kannst eine Sprache, eine Metasprache modellieren, die dann wiederum sich in Python zum Beispiel schnell selber parsen lässt.
Und ich hatte auch gesehen, es gibt Pack-Libraries für Python, die dann wiederum mit dem Python, was du halt hast, interagieren können.
Das ist ja erstmal so ein bisschen Brainfuck-Niveau und da bin ich aber dann tatsächlich, weil ich mich gerade mit diesem DSL-Thema jetzt beschäftigt hatte,
darauf angesprungen, dass die Pack-Pause und das, wie du das gerade anfasst, wohl doch irgendwie interessant sein müssen.
Da gibt es auch ein paar Doktorarbeiten zum Thema, wie kann ich eigentlich schnell Sprachfeatures mal entwickeln und testen und experimentieren und genau das ist das, wo ich gerade davor stehe, will ich eine verballhornte Form von Python haben, die irgendwie so ein bisschen Python ist, aber nicht oder will ich es wie eine ganz neue Sprache mal ausprobieren. Genau, das war eine schöne Anregung, die ich mir aus dem Core Sprint mitgenommen habe.
Ja, warum denn? Aber warum muss das eigentlich? Ich meine, wenn ich da so ein anderes populäres DevOps-Tool betrachte, so Ansible, da wird ja YAML verwendet. Warum reicht das nicht aus? Oder ist das, ich meine, deklarativ ist das. Man kann natürlich nicht so viel damit machen.
Genau, also Bateau ist interessanterweise ziemlich glatt genauso alt wie Ansible. Ich glaube, die Repos sind beide mit zwei Wochen Versatz angefangen worden, also 2011, 2012 und wir kamen damals von schon einem deklarativen Format, wo wir ständig das Problem hatten, dass wir die deklarativen Formate, also YAML ist ja jetzt erstmal noch kein Datenformat und noch kein Format,
Also insofern ist es natürlich deklarativ, weil Daten sozusagen in sich deklarativ sind, aber da wird dann teilweise halt eine Finite State Machine mit beschrieben, also tu das, tu das, tu das, hat teilweise auch selber wieder Eigenschaften von der Programmiersprache mit Schleifenbildung und solchen Dingen.
und was mir so ein bisschen
immer wieder die Fingernägel
hochrollen, ist halt, dass
da drinnen dann auch noch Ginger-Templates
abgesenkt werden.
Und das haut mir so
ein bisschen dem
Pferd die Krone aus dem Fass.
da hat man
dann so viel aneinander gestrickt und
wenn man so in der DevOps-Community rumhört,
ist halt auch so ein bisschen eigentlich die Aussage mit
Jamel ist so das unvermeidbare Übel,
Aber so richtig cool finden kann es eigentlich keiner.
Und deswegen hatte ich mich damals entschieden zu sagen,
nee, mache ich nicht.
Ich mache etwas, wo ich in Python deklarativ arbeiten kann.
Und aber immer, wenn es sein muss,
kann ich die volle Sprachpower von Python halt wieder rausholen
und dem Ding meinen Willen aufzwingen.
Naja, das ist halt, ja, ist natürlich dann schwieriger,
irgendwelche Voraussagen darüber zu machen,
was das denn dann tut.
Weil bei YAML kann ich das vielleicht dann noch so halbwegs oder so.
Aber das ist in die Tasche gelogen, weil Jamel ist halt eben nur eine Oberflächenstruktur und die tiefe Struktur drinnen, wenn das Jamel selber wieder die Komplexität hat von Schleifen und solchen Dingen und sich dann noch kombiniert mit Ginger, wo dann manchmal je nach Werkzeug nicht klar ist, ob das Ginger als aus dem Ginger fällt dann das Jamel raus oder das, was da dann auf der jeweiligen Zeile steht, kommt erst dann später zur Laufzeit ins Ginger rein.
Und da können sich auch ganz fiese Kombinationen draus ergeben.
Und für uns war da die Frage eher, das ein bisschen leichtgewichtiger zu halten.
Aber, auch das ist sozusagen ein Rückgriff jetzt auf den Walrus-Operator,
weil Python inzwischen ja syntaktisch relativ vielfältig ist,
ist da die Lesbarkeit irgendwann schon auch das Problem, wenn es zu komplex wird.
Und wir haben so an der einen Stelle eben das Thema, dass wir eine Syntax brauchen,
bräuchten,
3.8 könnte es jetzt, wo ich gleichzeitig
etwas mit einer Expression
mir ranziehe und zuweise
und dann weiterverarbeite.
Das wäre ganz nett, aber
da überlege ich tatsächlich gerade auch
eben, ob sowas wie ein Pack,
der sich gut integriert in die Laufzeit
von dem
Python, was da ist, nicht die Gelegenheit
gibt, da nochmal auch über eine Sprache
nachzudenken, die das eigentlich besser kann.
Interessant.
Also auf jeden Fall sehr komplex, das war jetzt kein ganz
Anfänger-Thema, wenn ich das so sagen darf.
War das die,
das war keine Einstellungsvoraussetzung,
oder?
Nein, das war so.
Wahrscheinlich haben wir auch viele Leute,
die das genau besonders besser interessiert
und mehr interessiert, das, was du gerade erzählt hast.
Ach, die Mischung macht es doch hoffentlich.
Ja, ja, ja, absolut.
Falls ihr nicht wisst, was Ginger ist, müsst ihr es einfach mal googeln,
das ist eine kleine Template-Sprache.
Ja, das ist
ja, das ist halt auch wieder so ein ganz
eigenes Feld. Ich glaube, also ich meine, ich würde
sogar fast sagen, dass es auch
eines der Dinge, für die Python viel benutzt
wird, halt so Infrastrukturen hochziehen.
Ich glaube, bei
Facebook ist Python
halt sozusagen die
Sprache für alle Services, die irgendwelche
operativen Geschichten
machen hintendran und so.
Und es gibt ja noch diverse,
Ansible wird ja auch viel benutzt oder halt
OpenStack und ach weiß der Teufel
ganz viele Sachen.
ja, aber
es ist nicht so ein richtig einfaches Problem
irgendwie.
Ja.
Ja, was haben wir denn?
Ja, habt ihr noch was auf der Liste?
Ja, meine Liste ist gerade unten angeschlagen.
Ja, gut.
Wir könnten noch irgendwelche Dinge picken zum Beispiel.
Ja, der Pick der Woche
ist natürlich dran.
Der Monat muss ja fast fatal sagen, so lange wie wir
die Folge gebraucht haben.
Wir verbrochen wieder ein bisschen.
Montagabend.
Ich habe eine ganz nette Geschichte
gesehen, nicht normalerweise, also
wäre es ja Software, aber
da habe ich jetzt gerade nichts.
Aber eine andere
Geschichte, die auch ganz
nett ist, finde ich,
es gibt jetzt ein Django-Forum.
Ja, überhaupt, Django ist auch
ganz interessant, gibt es jetzt bald
wahrscheinlich irgendwie
eine neue Version.
3?
Also erste Schritte
dahin und
das wird auch alles
noch sehr spannend und
es gibt jetzt halt auch
ein Forum, wo man
sich austauschen kann und das
tatsächlich ziemlich nett aussieht,
muss ich sagen.
Also das
sind
Und ja, viele der Leute, die da viel machen im Projekt unterwegs und es gibt viele interessante Diskussionen.
Ich war sehr überrascht, was da alles so geht, weil normalerweise ist ja mal Forum vielleicht irgendwie nicht etwas, wo man jetzt unbedingt hin will.
Aber da, das war echt toll.
Und wenn man sich mit Django beschäftigt und da Spaß dran hat, dann kann man sich das mal angucken.
Das ist echt nett.
Okay. Ich hatte gehört, tatsächlich in einem der Dango-Cars hatte irgendjemand Text-Blob erwähnt, das fand ich irgendwie ganz interessant. Das ist irgendwie für Sprachanalyse sehr wichtig, irgendwie auf NRTK aufgesetzt und macht dann irgendwie so Tags an, ja, setzt Satzteile dran und Sentimentanalyse und Tokenisierung und so was.
Da wollte ich noch mal ein bisschen tiefer reingucken.
Das sah sehr spannend aus und
das soll wohl ganz cool auch funktionieren
für größere
Textoperationen. Wahrscheinlich eher mit
Englisch, aber ja.
Das ist mein Pick der Woche.
Textblock, okay.
Christian, hast du auch einen?
Die Woche ist zu neu. Ich habe noch
keinen Pick.
Ich glaube, die Packs
letzte Woche waren mein Pick.
Das liegt auch mal am Gucken.
Ein ganzes Peng, statt ein Peng zu auffassen.
Ja, genau.
Ja, dann sind wir tatsächlich wieder am Ende
dieser Folge angelangt, dieser wunderschönen.
Wo auch immer ihr gerade seid,
wo auch immer ihr uns gehört habt, oder
schönen Tag, schönen Abend, schöne Nacht
und so weiter.
Bleibt uns gewogen, habt viel Spaß.
Kommt gut rein, wir hören uns. Achso, bevor ich das
vergesse, ich wollte noch fragen, wenn ihr Fragen habt
oder sowas, wir wollten ja nächstes Mal eine große
Frage-Folge machen, wo wir den Jochen Löchern
und ganz einfach eine Frage stellen,
die in einer Minute alle beantworten muss.
Falls ihr da irgendwelche habt, dann schickt
die bitte. Ich kann dann immer noch hinterhertreten.
Mich löchern, ja.
Ja, genau. Das machen wir.
Deswegen, wenn ihr Fragen habt, einfach raus damit.
Achso, und weißt ihr, noch eine
andere Geschichte. Wir wollten demnächst auch mal was
über die Standard-Library machen, also so ein bisschen
erzählen, was das so gibt. Ja, das war auch eine Anregung,
die wir per Mail bekommen haben und das war eigentlich,
fanden wir ganz gut, die Idee und
vielleicht können wir da einfach mal so durchgehen, weil
da sind ja viele verborgene Schätze eigentlich drin,
die man mal irgendwie näher betrachten könnte.
Und falls ihr auch da irgendwie einen Wunsch habt, was wir denn besonders mal
belohnen sollen, also auch raus damit.
Ja, vielen Dank, Tony,
dass du da warst. Vielen Dank, Christian.
Sehr gerne, jederzeit wieder. Wieder sehr schön. Ich habe wieder viel gelernt heute.
Ja.
Bleibt uns gewogen und bis demnächst.
Dann hoffen wir einfach mal, dass wir es ein bisschen schneller demnächst
wieder hinkriegen. Ja, wir werden uns diesmal nicht
wieder zweieinhalb Monate Zeit lassen.
Alles klar. Gut.
Ja, bis dann. Tschüss.