Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).
🎓 | Einführung in die Informatik | S01E08 | Parallelität und Nebenläufigkeit
Das Wichtigste aus dem Video
Tipp auf eine Zeit – das Video springt genau dorthin.
Transkriptautomatisch erstellt · 970 Zeilen
- [Musik] [Applaus] [Musik] [Applaus]
- [Musik] [Applaus] [Musik] [Applaus]
- [Musik] [Applaus] [Musik] [Applaus]
- [Musik] [Applaus] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] so hallo und herzlich Willkommen es jetzt
- ich wieder oder die Woche ist wieder vorbei wir haben wieder Mittwoch Bergfest und wollen uns heute dann im Nachmittagsbereich wieder um die
- wunderschöne Programmiersprache Python kümmern ich habe heute ein bisschen was interaktives mitgebracht das heißt wir werden uns heute mal mit Dingen
- beschäftigen die man tatsächlich auch gebrauchen kann also nicht weil ich jetzt sage man kann Tupel und dictionaries und wie die ganzen Dinge
- heißen nicht gebrauchen das wäre der falsche Ansatz sondern wir wollen heute mal was miteinander ichen und das erste Mal vor allem auch Jupiter Notebook
- verlassen wie das hier schon seht ich habe hier ein Visual Studio Code auf ihr online seht das noch nicht das werdet ihr aber gleich sehen und da würde ich
- bevor wir damit losstarten tatsächlich noch mal kurz an meinen Rechner zurück und euch zeigen wie man das installiert denn das ist
- tatsächlich ziemlich einfach ihr habt in eurem Anaconda Navigator unten schon Visual Studio Code auswählbar und da drunter steht letztendlich install das
- heißt letztendlich nur da drauf drücken und es wird dann installiert dann schaut das etwa so aus wie bei mir bis wir da den gemeinsamen Status haben vergeht
- aber noch ein kleines Weilchen ich werde also jetzt mich nach da unten bewegen und euch dann zeigen wie ihr diese Sachen
- installiert solltet ihr den anderen Screen hier sch wo ist er
- da so sollte Ihr schon installiert haben soll ja Leute geben die das schon benutzen dann achtet einfach nur daruf
- dass wenn ihr ein neues Dokument erstellt üblicherweise ein Python Programm das hier unten auf Python ausgewählt ist in meinem Fall ist das
- meine Anaconda Entwicklung sieht man hier durch das Cona und davor ist dies data science habt ihr schon paar mal gesehen weil ich das in der
- Vergangenheit hufig genutzt habe das sind einfach diverse Bibliotheken etc schon installiert wenn man da drauf drückt seht ihr auch dass alle die auf
- dem Rechner gefundenen Python Versionen also data science dann hier Base und diverse andere auch hier Installationen die tatsächlich direkt installiert sind
- ohne die Anaconda toolkette auswählbar sind das heißt wenn ihr das schon installiert haben solltet und bei euch tauchen jetzt auch die Anaconda
- toolketten hier auf dann könnt ihr entsprechend diese auswählen 3.764 bit data science Cona ist das was
- ich auswähle und sofern ihr ein neues Programm schreibt was die die Endung PY hat dann wird automatisch erkannt dass es sich um ein
- Python Programm handelt und dann wird man auch in diesem Werkzeug ja mehr oder weniger an die Hand genommen das autovollständigungen und viele viele
- andere Dinge dann funktionstüchtig W so Anaconda Navigator mal auf richall ja ja wir installieren das jetzt oder sie installieren das weil ich
- hab's ja schon das heißt das einzige was sie letztendlich mus machen müssen ist in ihrem Navigator ne ich wähle hier oben
- dann eben immer auch mal meine toolkette sie haben da die Basis toolkette das ist ja auch unerheblich und wenn sie dann runter
- scrollen steht hier Visual Studio Code bei mir schon ein laounge bei Ihnen ein install das installieren
- [Musik] starten gucken wir mal ansonsten gehen sie nämlich simplerweise na wo ist jetzt mein
- richtiger Cursor hier Visual Studio Code ansonsten gehen Sie ganz einfach und simpel
- guck D das hier V passt das sieht aber gut aus auf code.visualstudio.com dort ist hier Mac Download universal aber wir sehen ja
- schon Windows und Linux ist auch vorhanden und dann können Sie sich auch Studio Code
- herunterladen das ist reine Geschmackssache eine solche IDE zu wählen git gie gibt so viele unsed Programmierumgebungen mit denen man
- arbeiten kann ich persönlich arbeite sehr gerne mit Visual Studio Code obwohl das natürlich von Microsoft ist und ich ja
- bekanntlich Macuser bin aber die Vielseitigkeit von dem Werkzeug ist absolut genial weil ich da drin in der gleichen Umgebung C Code C++ code Java
- Code Python Code Swift und so weiter programmieren kann und immer dann wenn irgendeine neue Dateiendung dazu kommt dann erkennt das Visual Studio Code und
- installiert dementsprechend die Pakete die notwendig sind um dort ein syntax highlighting oder auch das Anstoßen des Compilers anzuen das also wirklich eine
- ganz ganz saubere Nummer das sollten wir jetzt erstmal alle insgesamt installieren also entweder ich gucke noch mal dass wir das hier jawohl
- entweder sollte sich hier in ihrem Anaconda Navigator dementsprechend Visual Studio Code befinden haben wir gerade schon rausgefunden das ist nicht
- bei jedem so dann installieren Sie es einfach wie der TE auch direkt von hinten durch die Brust ins Auge von der Webseite aktuellste Variante und dann
- können Sie es im Nachgang auch starten Nachgang starten bedeutet das sieht erstmal nicht so aus wie bei mir s haben dann so ein welcom Screen und das sind
- diese ganzen Tabs die sie hier oben sehen die man dann wegklicken kann und wieder hinzufügen kann da wird auch noch im Laufe des heutigen Tages einiges dazu
- kommen denn wenn das Werkzeug das erste Mal sieht dass wir P programmieren wollen dann wird erstm die pentkette und so weiter im Hintergrund geladen und
- auch wenn ich mich da jetzt wiederhole ich halt es für wichtig sollte das installiert haben geht hier oben links mal auf die
- Ecke und wählt dort entweder Ordner aus oder die Geschichte mit mit einer neuen Datei bei mir ist das ja dann im Kontextmenü z.B neue Datei und dann
- sieht das so aus und es ist untitelt weil es noch nichts kennt ich habe die umgeb in Deutsch ihr könnt die in englisch französisch Portugiesisch
- Chinesisch haben das ist also völlig unerheblich funktioniert von den Shortcuts her alles gleich so wenn ich jetzt sage ich möchte dort eine Sprache
- auswählen dann kann ich hier drauf drücken und kann die schon auswählen z.B CUD C das ist halt was anderes als C oder C++ oder auch hier unten go
- HTML Java JavaScript julia ist auch eine Programmiersprache lwm ist ein Compiler Lua Markdown Markdown haben wir schon
- kennengelernt Jupiter Notebook Umgebung um dort Dokumente zu schreiben so jetzt kommen wir auf P da kommt pH Pearl PE 6 PowerShell das ist hier für die Windows
- User ganz interessant möglicherweise ich habe schon mit Powershell gearbeitet ich find es jetzt nicht so super cool aber um mal
- irgendwelche Skripte relativ schnell in der Windows Umgebung zu machen registri einräge zu ändern oder auslesen zu können ist es deutlich angenehmer mit
- den wortmitteln die MIC t anbietet als dann mit einer nachträglich installierten Programmiersprache wie z.B Python die taucht hier unten auf wenn
- ich hier schon sage ich möchte Python wählen dann wird auf einmal hier unten die Programmiersprache Python erscheinen das mein Sprachmodus und wenn ich jetzt
- hier irgendwelche Dinge eintrage wie z.B Import dann tauchen da ein bisschen mehr Informationen auf als wir das von unserem Jupiter Notebook erkennen ich
- habe plötzlich die Möglichkeit auch nur impimport wenn ich jetzt enter drücke wird es automatisch vervollständigt was hatten wir z.B für
- Dinge Wirten nump ne da ist num schon drin SNP und zack ist das alles drin jetzt kommen mir sogar noch so ein paar Helfer
- least zu trage ich das hier mal groß dass ihr das alles sehen könnt wenn ich da drauf drücke steht dass mein unused Import ist quasi ein Hinweis eine
- Warnung wir nutzen diesen Import noch nicht das wird weg wenn wir das erste Mal ein nump Array oder ähnliches erstellen so kann ich herausfinden ob
- ich z.B totencode in meinem Script oder in meinem Code vorhanden habe der eingelesen wird aber nie benutzt oder auch Variablen die
- deklariert werden aber nie genutzt werden das sind natürlich Dinge die ein enorm viel helfen gerade wenn man so noch ein Beginner ist wir verlassen aber
- mit Jupiter Notebook tatsächlich diese wunderschöne Umgebung dass alles gut läuft den Kernel neu starten wenn irgendwas schief gegangen ist oder oder
- oder hier haben wir theoretisch Zugriff auf Betriebssystem und könnten möglicherweise in fremden Speicher rumwühlen was dann zum Absturz
- vielleicht dann nicht nur von dem jeweiligen Programm sondern vielleicht von der gesamten Instanz oder dem Betriebssystem führen kann ne also wir
- entwickeln uns jetzt in profirichtung weiter dann ist das bei euch soweit schon installiert
- jetzt ja hier vorne ist es hier wird genickt bei dir ist das sowieso schon alles muss ich
- nachfragen dies io hier ja das ist ein Programm von mir das können Sie auch nicht sehen das Programmieren wir nämlich gleich erstmal ist es wichtig
- dass das generell funktioniert so wir starten bitte ich kann nicht ändern auch wenn Sie hier unten klicken können Sie das
- nicht dann machen sie mal ein folgenden Trick pass mal auf antittitelt haben wir es ja
- hier sie machen mal Steuerung S und dann soll es ja gespeichert werden und dann nennen sie das jetzt mal hallo.
- PY ja so wenn ich das jetzt Enter drücke wird automatisch erkannt dass es sich hier um ein pyon prramm jetzt geht's ne
- genau perfekt so und in diesem haben wir ja auch schon mal kennengelernt wie das mit diesen ganzen Prints und SAS funktioniert das heißt wir geben mal
- gemeinsam print ein aber mal langsam wenn ich hier P eintrage dann taucht hier plötzlich ganz viel magisches auf inklusive Dokumentation wir erkennen
- noch unsere helpfunktion im Jupiter Notebook die wir ein paar mal benutzt hatten die ist hier inline drin inklusive syntax highlighting das heißt
- die einzelnen syntaxelemente werden unterschiedlich dargestellt wir kennen das von Def das wurde grün und dick dargestellt also in bal
- dann der Name meiner Funktion wurde in blau dargestellt und so weiter und so fort wir haben diese Möglichkeiten diese Elemente jetzt hier direkt vor uns was
- natürlich wenn man weiß von was man spricht das können wir ja jetzt alles mittlerweile enorm weiterhilft ne wir wollen print nutzen also wir könnten
- jetzt schon Enter drücken dann taucht Print auf MS mal nur die Funktion hinzufügen und D wenn ich die dann starte sagt er mir auch schon was er da
- haben möchte möchte values und separiert bitte in Form von kommatas das kann man alles nachlesen wir wollen aber einfach ein String in dem es heißt hallo Welt
- Ausrufezeichen tolles Programm das schönste Programm das man sich vorstellen kann und ob das jetzt alles funktioniert also ob hier unten eben
- auch meine Anaconda P Version genutzt wird genutzt wird kann ich noch mal checken bei euch ist das dann wahrscheinlich diese Base da hier die
- auch recommended ist ich habe halt ein paar zusätzliche Funktionen in den data science drin deswegen nutze ich diese wähle ich dann aus und jetzt habe ich
- hier oben ein unscheinbares play Symbol das hier sollte ich mal wegmachen das gehört hier nicht in den Screens schs mal hierhin so
- hab ihr hier oben so ein unscheinbares play Symbol wenn ihr da drauf drückt passiert hier unten so ein bisschen Magie nämlich hier wird das Programm
- ausgeführt und hier unten ist auch das Ergebnis hallo Welt unser Programm funktioniert das sieht jetzt ein bisschen kryptischer aus als was aus dem
- Jupiter Notebook kennen denn Users fpramme opt pyon also Anaconda 3 environments data science bin Python und dann irgendwie den Code und dann den
- auch noch ausführen das sind einfach Dinge die werden in Jupiter Notebook euch nicht gezeigt aus Gründen der Übersichtlichkeit hier haben die Dinge
- und heute möchte ich mit euch wie gesagt was machen was euch weiterbringt was euch vielleicht auch mal so ein bisschen zeigt in welche Richtung es noch
- weiterhin gehen kann denn die Begrifflichkeiten bis auf Klassen also Objektorientierung können wir jetzt schon alles das heißt wir können Skripte
- schreiben wir können sogar Programme schreiben die nicht unbedingt ein skriptcharakter haben also die nicht zwangsläufig oben anfangen müssen und
- unten aufhören müssen habt ihr schon malwohl ne das frage ich nicht dann machen wir jetzt einfach mal ein
- Tafelbild wer ich auch mit euch zusammen hier ist irgendwie sowas komisches das will ich hier nicht das ist
- anlast ma wir das mal hoch dass ihr das schön sehen könnt perfekt bislang haben wir ein Programm
- ausgeführt das ist meine Zeit mein Programm startet hier endet hier das ist
- mein Programm startet bei ja mal sagen das ist hier die Null ne dann startet es bei t00 und endet bei keine Ahnung wie viel
- das ist 2 3 4 5 1 2 3 4 so neun von mir aus ist egal jetzt passieren in diesem Programm ja unterschiedlichee Dinge ich habe
- Import drin ich habe irgendwelche Variablen Zuweisungen drin ich habe irgendwelche Prozesse drin unter anderem ja auch schleifen die haben wir
- kennengelernt und in so einer Schleife kann es ja sein dass mein Programm letztlich einfach wieder von vorne anfängt eine endlos Schleife haben
- unserem Spiel gehabt z.B SP ne solange irgendeine Bedingung true war also wahr gewesen ist sind wir wieder zurück zum Anfang gesprungen und dann ist das
- Programm wieder durchgelaufen hat wieder seine Bedingungen überprüft und wir hatten eigentlich immer einen wiederkehrenden Startpunkt in diesen
- Schleifen oder in diesem Programm kann es natürlich auch hier noch mal eine Schleife geben es kann hier so eine Schleife geben es kann selbst hier eine
- geben ist ja nur exemplarisch so und jetzt programmiere ich üblicherweise ja sequentiell das heißt mein Programm
- ein und danach startet vielleicht ein bisschen kleiner mein Programm 2 nacheinander Programm 3 Programm 4
- Programm 5 Programm 6 nacheinander das dauert lange bis ich dann einmal durch bin mit meinen sechs Programm und wieder zum Anfang
- durchgehen kann eben x lange Zeit vergangen sein jetzt kann ich das natürlich wir sind ja Programmierer und vor allem Informatiker
- damit anfangen dass mein Programm 1 hier startet bei Null und ein bisschen verzögert nur ein bisschen verzögert
- mein Programm 2 hier schon startet so das ist 1 2 3 machen wir ganz ehrlich dann ist es
- eben auch genauso lang wie das Programm was wir da oben hatten so beim ersten Fall hatte ich 9 10 11
- 12 13 Sekunden sagen wir jetzt mal und jetzt hier unten haben wir 3 4 5 6 7 8 Sekunden seht ihr den Unterschied was ist denn der
- Unterschied inander laufen ja genau also wenn ich Dinge miteinander verzahne oder sogar parallelisiere kann ich in derselben
- Zeit mehr erledigen das ist das eigentliche Grundprinzip man muss da auch gar nicht jetzt irgendwelche großartigen
- Definitionen oder sowas erklären den das ist eigentliche Grundprinzip ich habe ein Programm und das läuft ab und das hat eine gewisse Laufzeit eine Dauer so
- Hello World dauert nicht lange ne wenn ich so ein Spiel dann dauert das ebeno lange wie das Spiel dauert und wenn ich ein zweites Spiel starten währenddessen
- das erste schon läuft dann geht das in der programmierphase in der wir das programmiert haben so nicht ne wenn ich mir das ganz generisch
- anschaue so wie hier dann wird ein ein und oder wirklich sofort klar dass das hier unten schneller ist und wir betrachten nur zwei Programme betrachte
- ich 20 30 40 Programme sieht das ganze schon wieder ganz anders aus ihr benutzt alle hier in der Vorlesung ein Computer der über ein Betriebssystem verfügt der
- über einen Scheduler verfügt also ein ein System das Priorisierungen an unterschiedliche Tasks also programmabschnitte oder Unterprogramme
- verteilt und dementsprechend versucht möglichst viel zu parallelisieren ansonsten muss ja immer in einen gewissen Systemabschnitt
- überprüft werden ob sich was geändert hat hat sich an der Maus was geändert nein okay das dauert vielleicht Z Millisekunden hochgegriffen sind
- wahrscheinlich nur pikoskunden aber dieser Überprüfung muss dann immer wieder passieren immer wieder passieren immer wieder passieren und sorgt
- letztendlich für Verzögerungen wenn ich von der kontinuierlichen Welt in eine ereignisorientierte Welt wechseln kann indem ich so lange irgendwas anderes
- mache bis eine Taste auf der Tastatur gedrückt wird und ich kriege das dann mit dann bin ich insgesamt schneller und kann in der Zeit wo ich sonst nur warte
- und nichts mache etwas tun ganz blöd ist es wenn wir unseren Prozessor nicht zu 100% auslasten das
- klingt immer ein bisschen mit soem Nachgeschmack man möchte ja eigentlich wenn man in der Taskleiste so guckt nie sehen dass die
- CPU gerade zu 100% irgendwas macht man hat immer das Gefühl das ist schlecht letztendlich ist das aber das perfekteste was Ihr haben könnt dass die
- zu 100% was tut denn ihr habt 100% CPU bezahlt und gekauft und die macht dann irgendwie nur 3% oder 4% was eine Aufgabe die 100% D CPU auslastet ist
- super Aufgaben die nur zu 2 3 4% auslasten sind da ist halt noch Platz das heißt ich kann noch mehr Aufgaben hinzufügen und auch dann bei der
- Parallelisierung ist irgendwann auch mal ein Ende ne also man kann nicht 100% alles immer parallelisieren und manchmal gibt es auch Probleme die man lst löst
- oder versucht zu lösen mit der Parallelisierung die an der Stelle nicht so den rieseneffekt haben das ist höer von Aufwand her als am Ende vom
- benefit jetzt gest oder jetzt betrachten wir ja in der Konstellation ganz oft ich versuche euch mal ein bisschen Licht zu machen das schon ein bisschen dunkel
- hier oder so ja perfekt jetzt erstmal so ein bisschen akklimatisieren Pupillen zusammenziehen
- ne jetzt weiß man den das ist der Drogentest ne wenn sich die Pupillen jetzt nicht zusammenziehen dann weiß ich Bescheid spaß beiseite
- ähm wir betrachten ja PCs und wir werden auch im digital technology fast ausschließlich PCs betrachten se wir orientieren uns ein bisschen in IOT
- Systeme m desto mehr ich an die Hardware Ebene heruntergehe umso wichtiger werden Dinge der Parallelisierung eine Instruktion also
- ein Maschinenbefehl der ausgeführt wird hat hat einen gewissen Takt das heißt ich kann so und so viele Instruktionen machen in so und so viel Takt oder
- andersrum gesagt ich kann so und so viel erledigen in der und der Zeit ich will nur mal sagen eine Schleife zähle von 0 bis
- 1000 wird erst die Zahl 0 dann die Zahl 1 dann die Zahl 2 die Zahl bis 999 und irgendwann kommt dann ist es jetzt gleich 1000 dann wird aus der Schleife
- rausgenommen das heißt es wird die ganze Zeit in dieser Schleife nur getrödelt man spricht umgangssprachlich davon auch von trödelschleifen oder Warteschleifen
- eine delayfunktion ist also auch nichts anderes als leg dich hin warte 20 Millisekunden wach wieder auf leg dich hin warte 20 Millisekunden wach wieder
- auf das ist auf der einen Seite effizient auf der anderen Seite natürlich auch ein bisschen dadurch begründet dass man versucht einfach sein
- Programm auch in gewisse zeitliche Strukturen zu bewegen wenn ich euch jetzt sage dass man mit einer passenden Hardware diese 1000 Instruktionen ich
- sag mal es dauert jede einzelne eine Sekunde ist falsch viel viel schneller weil abhängig von eurer CPU Leistung aber gehen wir mal vom einfachen Fall
- aus die ist eine Sekunde so meine trödelschleife zählt bis 1000 also habe ich 1000 Sekunden gewartet wenn ich jetzt eineware wie z.B
- ein ASIC oder ein FPGA nutze dort habe ich die Möglichkeiten diese Überprüfung zu parallelisieren das heißt sie dauert nur noch einen Takt
- das heißt ich habe eine Beschleunigung von Faktor 1000 in meiner Ausführungszeit das ist keine Seltenheit das ist so ein bisschen der
- Unterschied ganz oben Schicht 7 im ISO OSI Referenzmodell das ist so die Anwendungsschicht da sind eigentlich alle softwareingenerer so ein bisschen
- vereinbart und dann gibt's hier unten irgendwo so Schicht 0 bis 3 physical layer und was es da noch so alles gibt da kann man Magie anwendenür
- natürlich auch nur bis zu einer physischen end Schwelle aber dort kann man tatsächlich Magie anwenden wie das
- funktioniert und zusammenhängt das möchte ich heute mit euch mal kurz gemeinschaftlich programmieren wir werden also gleich ein Programm
- schreiben eigentlich werden wir vier Programme schreiben wir werden ein Programm schreiben das über keine nonconcurrency also keine
- Nebenläufigkeit keine Parallelisierung verfügt mit ganz klassischen wortmitteln und dann werden wir das sukzessive ergänzen erweitern verändern wenn man so
- möchte um Möglichkeiten des threadings habt ihr vielleicht schon mal gehört Möglichkeiten des multiprocessings habt ihr vielleicht schon mal gehört
- Möglichkeiten vielleicht auch hinsichtlich asynchroner Programmierung erweitern wir werden immer das gleiche Beispiel haben wir werden immer das
- Gleiche tun wir werden am Ende aber merken dass es unterschiedlich lange dauert und Effizienz und vor allem auch effizientes programmieren ist etwas was
- man in der Java Entwicklung und meistens auch in der Python Entwicklung nicht so beigebracht bekommt aber wenn ihr in digitalisierungsprojekten Hardware nutzt
- wie einen rasberry PI oder andere sehr schwache Hardware dann nützt es euch nichts wenn euer Rechner 64 Bit 64 GB Arbeitsspeicher hat aber das
- targetsystem das nicht besitzt da möchte ich heute mal ein bisschen mit euch eben die Augen öffnen dass es mit sehr wenig Aufwand einfach nur ein Gewissen
- Verständnis mitbringen aber mit wenig Aufwand durchaus ein Faktor 10 Faktor 20 in Beschleunigung möglich ist also ich will da jetzt gar nicht Teasern sondern
- wir setzen uns jetzt einfach wieder an unser Programm und werden gemeinsam wirklich gemeinsam dieses jetzt mal erleben das heißt wir programmieren ein
- Programm das es uns ermöglicht Laufzeiten zu messen also wie lange hat mein Programm möglicherweise für was auch immer gebraucht ich räume
- mir mal ein bisschen Desktop auf weil die Webseite die brauchen wir jetzt hier nicht mehr die kann ich also mal munter wegmachen
- genau so hier das könnte ich gebrauchen genau Schups und dann fangen wir mal an unser Programm zu designen hallo Python das haben wir ja gerade ausprobiert das
- funktioniert das brauchen wir jetzt nicht mehr ich habe ja schon mal ein Programm gestartet das heißt io also Output und nonccurrent also ohne
- Parallelisierung rein von scratch so wie wir in Jupiter Notebook die ganze Zeit programmiert haben ihr könnt das genauso nennen ihr könnt Klaus Dieter Egon wie
- auch immer nennen ihr könnt auch euer hallo weltprogramm dazu jetzt missbrauchen das ist also unerheblich wichtig ist nur am Ende des ganzen Tages
- werden wir vier unterschiedliche Programme haben die eigentlich die gleichen Anforderung besitzen und auch das gleiche tun nur halt unterschiedlich
- schnell so ich brauche dafür zwei imports jetzt fangen wir mal an
- Import und dann gibt es requests müsst i mal gucken ob ihr das habt und Import time auch mal gucken ob das euch
- vorgeschlagen wird bei mir ist es auf jeden Fall da so das ist erstmal der Beginn unseres Programms meine
- mainfunktion die ich konsequent nicht brauche wenn ich Jupiter Notebook verwende die ich aber dringendst brauche wenn ich aus Jupiter Notebook also in
- einem normalen pyon Programm mich befege die müssen wir jetzt erstmal herleiten und die sieht wie folgt aus das ist eine if Schleife if underline
- underline Name underline underline also wenn mein Programm einen Namen aufweist der gleich gleich iten under under Name ist gleich gleich
- jetzt den String underl under Main under underl kann man später einfach copypasten das ist nichts tragisches dann soll was getan werden und ich
- möchte gerne 80 mal eine Webseite öffnen wobei eigentlich eine Liste von Webseiten also gehen wir hier in unsere Hauptfunktion rein und definieren uns
- mal eine Variable die heißt Sites also Seiten gleich und das ist eine Liste ich starte meine Liste hier einfach mal mit Klammer auf Klammer zu ihr merkt da kann
- ich auch schon sofort die geschlossene Klammer wie ein Jupiter Notebook erwarten und jetzt ma ich hier meinen ersten String rein das ist
- https del/ash
- www.ostfalia.de so und dann mache ich ein Komma geh in die nächste Zeile und drücke das noch ein bisschen ein hier so und mache dort
- https doppel. double/ www. was soll wir nehmen Youtube
- ja so das ist auch schon mal schick es ist unerheblich ob ich das jetzt einrücke oder ob ich das hier auch in eine Zeile
- mache ne also ich demonstriere euch das das funktioniert auf beiden weisen genauso gut ne plus es kann ja sein dass ich irgendwann mal meine Liste erweiter
- für was auch immer ups habe ich falsches eingetragen hier das würde natürlich dann irgendwie hier rechts raustragen ihr kennt ja nach diesen Trennern kann
- ich grundsätzlich einrücken und dann sieht das ein bisschen sauber aus so diese Liste hier die möchte ich aber gerne 80 Mal
- haben das heißt diese Inhalte da drin ne und insites ist jetzt 80 x www.oster.de und 80 x www.youtube.de also insgesamt 160
- Webseiten Aufrufe und wir wollen das ja überprüfen wie lange das dauert also gehen wir die nächste Zeile Code
- auch noch in unserer mainfunktion und definieren uns mal eine Startzeit start time
- time ich gucke mal kann ich das für euch nicht sogar noch ein bisschen dicker machen plus hier nee aber irgendwo unter
- [Musik] Ansicht
- Fenster Controll plus auch nicht Kommand plus oh das ging ein bisschen größer okay dann seht ihr das vielleicht noch ein
- bisschen besser das hier ma ich mal ein bisschen runter das brauchen wir jetzt nicht und dann haben wir hier ein etwas größere Darstellung ich glaube das das
- kommt euch entgegen gerade hier jetzt gut dann brauchen wir eine Startzeit und am Ende e auch irgendwie eine duration also wie lange etwas
- gedauert hat beginnen also un Startzeit das ist gleich time Punkt und jetzt können wir hier ja tatsächlich schon ganz viele Sachen
- auswählen die uns angegeben werden wo in jupit Notebook Tabulator drücken mussten und hier tatsächlich schon was davon sind irgendwelche Klassen wir wissen
- noch nicht was Klassen sind aber wir wissen was Methoden sind und so weiter und so fort wir suchen hier noch mal nach time und wollen das Objekt hier
- nehmen time da kommt eine floating point number raus die wollen wir auch haben das ist einfach die floating point number die immer dann gesetzt wird wenn
- mein Programm startet also meine Startzeit die wird protokolliert und wenn ich dann diese Startzeit quasi noch mal von
- meiner regulären Zeit abziehe dann habe ich die Duration automatisch ne machen wir das mal so müssen ab Bedenken es ist eine Funktion das heißt wir brauchen
- noch die Klammern hier hint so dann wollen wir später eine Definition schreiben also eine Funktion die alle Seiten
- downloadet gucke mal nennen wir das mal machen wir hier mal richtig runter Download nennen all sites und da übergeben wir auf jeden Fall diese Sites
- die wir hier oben deklariert haben wir haben die Funktion noch nicht deswegen wird mir die jetzt natürlich böswillig dort angekre dass ich die noch nicht
- habe aber wir wollen ja erstmal unsere Logik aufbauen bevor wir dann tatsächlich den Rest erledigen gut das heißt wir haben hier schon einiges
- geschafft jetzt brauchen wir noch die Duration so duration ist gleich time plus time das haben wir ja schon das ist also meine aktuelle Zeit
- und was muss ich jetzt davon abziehen oder aufadieren also
- minus starttime die ist hier schon hinterlegt und damit habe ich auf jeden Fall die Abhängigkeit wann habe ich gestartet und wann bin ich mit dem
- Download fertig das ist einfach nur weil das noch nicht es gibt ja noch ein paar Probleme
- die seeht hier oben fünf Dinge die find gerade doof Moment hier bin ich Dinge die find er gerade doof wir kriegen dann erst die Ausgabe was er doof findet wenn
- wir es ausgeführt haben noch wird so nicht funktionieren weil wir haben z.B die Funktion download a ses noch nicht ne und so weiter und so
- fort eine printf Anweisung also eine printanweisung print Klammer auf Klammer zu so und da wir jetzt formatiert Printen wollen müssen wir hier vorne ein
- kleines F dazu packen und da drin wollen wir downloaded jetzt wollen wir ein schweifte Klammer auf und zu und
- wollen da drin die Länge unserer sitides also wir wollen wie oft eben etwas gedownloadet ist mit welcher Zahl gerade
- ausgeben in und diese geschweiften Klammern sind quasi immer die Platzhalter dafür was ich in dieser bedingten Formatierung
- meiner PRF Anweisung darstellen möchte in duration mein Kommentarfeld hier wegmachen
- moment mal das auf die linke Seite duration seconds ja ich glaube das sind Sekunden die zurückgegeben werden das
- heißt für die erste Seite oder generell wenn der fertig ist sagt er mir 160 gemacht in der und der Zeit die Zeit ist letztendlich die
- Duration die ausgibt und die Anzahl wie viele Sites bei 80 mal YouTube und 80 x aostfalia.de wird klar sein dass es sich hier 160 Sites handeln wird ne also nur
- der Vollständigkeit halber damit wir da eine schöne printf Anweisung printanweisung haben so
- dann download all sites genau genau dann machen wir uns jetzt mal eine Funktion und ich mache das eigentlich immer dass die Funktion oberhalb meiner
- mainfunktion sind das heißt hier in diesem Platz den ich jetzt hier geschaffen habe da machen wir jetzt unsere Funktionen rein und weil ich das
- gerne miteinander verzahne machen wir jetzt zwei Funktionen nämlich einmal das runterladen von einer Seite und einmal das runterladen von allen Seiten die
- sind aber ineinander verwoben ne so habe ich maximale Flexibilität wenn ich irgendwann mal was ändern möchte oder was wieder verwenden möchte dann
- funktioniert ganz gut so die Definition Def download site da gebe ich ein URL mit und
- [Musik] eine Session soweit so gut diese Dinge bekomme ich aus
- meiner Bibliothek diese request biblth die ich dort benutze da muss ich mich also auch nicht großartig drum kümmern so with also mit dieser
- Session hole ich mir die URL als eine response und da drin gebe ich jetzt ein
- print F Print und das ist auch eine formatierte bedingte Formatierung da schreibe ich read jetzt möchte ich wieder die Länge also
- l response Content der da drin gespeichert ist Klammer zu Klammer so jawohl from also aus meiner
- URL na from und meine bedingte Formatierung der URL was mache ich hier ich hole mir
- meine Session ich hole mir also mein Download eine Webseite und gebt dann zurück diese habe ich jetzt von der und der URL geladen also den Content das ist
- dann dementsprechend wie viele Kilobytes ist die Webseite groß wenn man so möchte und ja wie heißt die URL die ich lade einf um einigermaßen generisch mit zu
- sein so dann haben wir natürlich auch noch den Wunsch die Funktion auszuführen die wir ja eigentlich hier unten deklariert haben na wo ist er da wir
- haben nämlich die Funktion hier genannt dass ich das hier haben möchte und das ist ja gar kein Problem ich kann das hier kopieren ich kann hier rein und
- sage ich mache jetzt meine Definition und anstatt das so zu belassen ma ich hier ein Doppelpunkt hin und kann diese jetzt mit Leben füllen auch hier wieder
- in requests. eine Session als eine Session Doppelpunkt und für jede URL
- in Sites Doppelpunkt mache ich den Download Site mit meiner URL und meiner
- Session eigentlich nichts tragisches dieses ganze bunte hier das zeigt uns ja schon dass es einigermaßen gut funktioniert warum wir jetzt hier
- in not expected ach so ja gut das ist weil er der Meinung ist er möchte das jetzt irgendwie
- einrücken oder nicht so was gucken wir noch mal was wir gemacht haben wir haben imports genutzt dann downloaden wir eine Seite und wenn wir nur eine laden wollen
- würde würde diese Funktion für sich auch gut funktionieren wir verwenden sie aber kontinuierlich hier unten einfach wieder in einer vorschleife indem ich jede
- einzelne URL also jeden einzelnen Punkt aus meiner Liste Abrufe jetzt gucken wir noch mal das soweit in Ordnung geht das sieht aber
- ganz gut aus ich starte das mal so da haben wir jetzt Import ah oh jetzt weiß ich auch was er hat ich
- habe hier jetzt passt es das soll ste dementsprechend so
- sein ma sauber ihr seht dann auch immer diese Hilfslinien die sich da ergeben und oben unserem Namen der hat jetzt nichts rotes mehr das heißt die Fehler
- die er gerade geschmissen hat hier gerade bearbeiten wollte die sind auf dem kundig jetzt weg ich ma dies Terminal hier un ein bisschen höher dass
- wir auch sehen was da passiert ma mal car hier rein damit sich das auch alles wieder von ganz frisch darstellen l und dann starten wir das mal
- Puff und jetzt kriege ich hier meine Session IDs und Youtube aostfalia Youtube austfalia Youtube a ihr merkt schon immer
- nacheinander also quasi wie in dem Abschnitt den wir dort oben an der Tafel haten immer das eine vor dem anderen das machen wir jetzt 160
- mal [Musik] pfeifen darf man im Stream ja nicht das ist ja ein schlechter Ton sorry
- dafür und es läuft und läuft und wir machen ja immer das gleiche wir laden ja auch immer die gleichen Kilobytes die wir da gerade
- sehen und warten und warten und warten so was wir jetzt merken ist wie schnell ist mein Programm und wie schnell ist auch die Verbindung natürlich zum
- Internet wenn ich jetzt ein kabelgebundenes Netzwerk habe bin ich schneller als wees Network ne so was haben wir da jetzt
- 160 Webseiten in 46 Sekunden das schreibe ich auf also wir
- haben ohne alles 46 komm was ist das 94 Sekunden einfach nur um es einordnen zu können das ist ja unsere Lösung ein die
- hat keine Hilfsmittel die ist einfach nur so wie wir es jetzt schon können wie wir es sonst in dem Jupiter Notebook auch programmiert hätten ohne
- irgendwelche netten gixs so die gimmiics kommen jetzt jetzt fangen nämlich an dieses Programm als eine neue Datei zu
- erstellen gehen also hierhin oben auf bei mir ist es ja dann Datei neue Datei dann machen wir so dassich auch so funktioniert wir speichern das und jetzt
- nenne ich die neue Datei io underline threading PY ganz wichtig immer PY hinten dran das ist für
- Python und dann habe ich hier mein Programm wenn ich jetzt wieder mit imports arbeite und so weiter wird auch schon genau das richtige verwendet ich
- nehme jetzt mal den kompletten codeung a Steuerung C also kopiere alles und pack ihn hier
- rein wir fangen jetzt an unser Programm so umzuschreiben dass wir anstatt sequentiell immer das eine od das andere zu machen dass wir unseren Programm
- unter Programme erstellen lassen vom Betriebssystem aus also thres benutzen das ist gar nicht so einfach und gar nicht so kompliziert
- wir brauchen noch mal eine zusätzliche Bibliothek die fü ich euch mal hier mit zu die kann man jetzt oben drüber und drunter machen das ist eigentlich egal
- ich mach sie mal oben drüber das ist Import Import threading wenn man es richtig schreibt
- dann dürfte es auch funktionieren genau Imort
- na hat das hier auch erkannt ist das da auch drin find do gut mault natürlich weil das noch nicht benutzt haben das Standard ist also das ist jetzt nice to
- know danke liebesprogramm aber ich weiß dass wir es noch nicht benutzt haben später wenn wir ein großes Programm haben und das taucht dort auf dann sind
- das Dinge die können wir wieder weglöschen weil wir sie offenkundig nicht gebraucht haben ich mache noch mal eine Bibliothek oben drüber das ist
- Import con current Punkt und wir wollen davon Futures also die zukünftigen
- Funktion die in alten pyon Versionen quasi nicht vorhanden sind und benutzen die so wie sie sind also wenn wir irgendwas mit threading
- benutzen müssen wir jetzt dementsprechend threading vorne hinschreiben der Verständlichkeit halber lasse ich das jetzt so natürlich könnte
- man das auch mit einem sbefehl irgendwie abkürzen ne D man dann nicht mehr thre schreiben muss macht dann t Punkt und nimmt die Funktion daaus aber so ist es
- schon in Ordnung jetzt muss ich bevor ich irgendetwas loslege natürlich auch meinem Betriebssystem sagen dass ich thres verwende das ma ich jetzt mal
- lokal das heißt ein Thread underline Lokal gleich threading
- da Punkt und dort gibt's auch irgendwo ein Local nämlich das hier unten di hier das verknüpfe ich jetzt miteinander das ist die Funktion also meine threading
- local Funktion wird also ausgeführt und das Ergebnis daraus wird in die Variable threting local überführt nichts tragisches so jetzt brauche ich aber für
- diese threats irgendwelche Sessions die wir gerade in unser Programm ja schon eingebaut haben die muss ich erstmal bekommen ich ma er mein Terminal hier
- ein bisschen kleiner wieder das brauchen wir nicht ein bisschen mehr sieht also ma mal eine Funktion Def und das ist
- get [Musik] Session und machen dort mal ein if etwas not also wenn nicht has
- Attribute in threading local also Thread local und meiner Session also wenn mein wenn dieses Attribute Session darin nicht
- auftaucht dann mache eine request auf wenn es stattdessen aus vorhanden ist dann gebe nur einen Return raus ne das ist jetzt die Logik die wir da machen
- wollen also überprüfen ob es schon eine Session gibt die läuft mit dem Namen und wenn dem so ist dann hurra wenn dem nicht so ist dann generiere Sie bitte
- also fangen wir an das wie folgt zu machen if not hat natürlich if Schleifer am Ende brauchen wir wieder ein Doppelpunkt und jetzt machen wir hier
- einen Thread local pun Session ist gleich requests groß
- Session auf Klammer zu und wenn dem ganzen nicht so ist dann machen wir return und das ist eben einfach letztendlich das gleiche wie hier oben
- können wir kopieren einfügen nämlich das ist unser local Session so wir machen also jetzt nichts anderes als
- eine Überprüfung ist schon etwas am laufen wird diese Webseite jetzt schon heruntergeladen wenn ja mache nichts wenn nein lad die runter also wir
- versuchen einfach nur zu gucken dass sich diese kleinen Unterprogramme nicht in die Quere kommen das ist also insgesamt sauber von statten geht dass
- ich genauso 160 Webseiten runterlade und nicht nur 149 oder sogar 200 am Ende sondern dass das einfach sauber ist ne so jetzt haben wir ja auch unsere
- download site die scheint mir ganz gut gewesen zu sein wir brauchen dort aber jetzt die Session nicht mehr die haben wir hier oben ja
- schon mit drin das heißt die müssen wir nicht mehr übergeben wir können also mit der URL das ganze beibehalten unsere Session holen wir uns hier unten das
- heißt Session ist GLE get Session die Funktion haben wir ja da oben jetzt schon geschrieben ma unsere Funktion dran und bekommen dann auch das ganze
- zurück so unsere Session get URL das passt als Respons und wir geben am Ende eben unsere URL mit dem Content aus das waren jetzt erstmal
- so sag mal drei zeilencode die wir geändert haben jetzt machen wir noch eine weitere Änderung die passiert hier unten wir
- wollen nämlich jetzt mit diesem concurrent also mit dieser Nebenläufigkeit der Parallelität arbeiten heißt wir gehen hier in die
- Funktion download all sites mit concurrent Futures gr t Thread Pool executter und
- dort machen wir max worker workers ist es hin na das ist aber jetzt nicht so schön
- Max workers GLE 5 sch mal zu Klammer auf Klammer zu eines zu viel genau so wir deklarieren also hier jetzt
- ein Pool an parallelen Threads und sagen fünf threats können parallel laufen jeder Thread wird vom Betriebssystem sehr gerne auf einen
- einzelnen Kern ausgelagert wenn ich also 12 Kerne habe physische Kerne dann kann ich 12 Threads parallel laufen lassen wenn ich nur sechs Kerne habe dann kann
- ich auch nur sechs parallel laufen lassen am Ende wird das Betriebssystem dort eine Zahl eintragen die für das Betriebssystem angenehm ist ich weiß
- dass meine Maschine eben in acht Kerne hat das heißt ich kann da jetzt munter trotz das im Hintergrund ein Stream läuft ähm auch diverse parallele
- Prozesse starten ne ähm genau da fehlt der mal jetzt den Curser
- ne auch sind wir nicht fertig wir wollen hier das ganze s executter Tor kutor Doppelpunkt dann passt das und da wir jetzt ja
- letztendlich schon alles gemacht haben was wir brauchen können wir diesen kompletten Bereich hier unten drunter wen ich mein Cursor wieder finde
- ersetzen durch H wieder oben hin wird eingerückt durch unseren Executor den wir verwenden da bauen wir eine Map auf also
- eine Karte durch die er sich durchhangeln soll und das sind unsere download seite und unsere Sites ist jetzt maximal schlecht zu
- sehen so aber unsere unser Download hier oben der hat sich durch die get Session eigentlich nur geändert weil wir die Funktion ausgelagert haben und hier
- unten haben wir jetzt die concurrent Features das heißt wir nutzen jetzt tatsächlich eine Nebenläufigkeit mit fünf maximalen Arbeitern die parallel
- arbeiten das heißt wir könnten schon mal davon ausgehen dass unsere Zahl möglicherweise sich gleich um F teilt wir fünf Mal das Gleiche parallel
- machen und da wir diese executoren Executor hier dann definiert haben machen wir nichts anderes als die jeweils diese jeweiligen Seiten
- herunterladen ich guck noch mal ob wir hier unten was ändern müssen aber eigentlich ist durch die die wir dort haben alles gleich
- geblieben so fass mal kurz zusammen wir haben gerade eben 46 Sekunden gebraucht indem wir alle diese Dinge nacheinander durchgeführt haben erst die eine
- Webseite dann die andere Webseite dann wieder die erste die zweite die erste die zweite jetzt lassen wir das Betriebssystem bisschen Magie in unser
- Programm überführen indem wir fünffache Parallelität ansetzen ob am Ende auch der fünffache beschleunigungsfaktor sich
- einher geht oder nicht das müssen wir dann dementsprech überprüfen so ich mache hier wieder das Terminal hoch dass wir das schön sehen
- was da passiert ich mache wieder ein Clear rein weil wir haben uns ja die Zahl aufgeschrieben diese knapp 47 Sekunden und werde jetzt unser Programm
- ihr seht ja mal welches hier oben aktiv ist das nämlich dieses gelbe od dieses weiße Kreissymbol und werde das mal ausführen in der Hoffnung dass es läuft
- und das sieht schon schneller aus das sieht um ein Vielfaches schneller aus und es ist auch schneller 8 x 5
- ist 40 ja cool ne das heißt ich bin sogar noch ein bisschen schneller geworden funktioniert bisschen hoch das Local funktioniert
- nicht du hast auch threading hier oben drin ne das konnte er finden und hat auch jetzt nicht das Problem dass die Bibliothek nicht da ist oder so sondern
- nur diese dieser Befehl h der ist bei dir aufks
- h woran könnte es liegen es ist ja dann die Zeile hier die ja mockiert ne da wird ja quasi nur deklariert und den Wert
- zugeführt das ist die Klasse local genau und das ist das threading Modul das heißt die threading Modul Punkt und dann gibt er dir das Local
- nicht zurück ja wenn du es einfach so einträckst find das auch doof ja noch mal gucken ich fasse ja einfach an der Tafel schon mal zusammen dass wir
- mittels vier zeilencode glaube ich eine mehr als fünffache Beschleunigung das ist jetzt
- thres und wir haben irgendwie 8 pun 28 Sekunden das sind jetzt natürlich performancewererte die kommen von meinem
- Rechner eure können völlig anders sein ihr seid mit dem WLAN drin ich bin mitm kabelgebundenen Netz drin das kann jetzt schneller sein das kann langsamer sein
- ich bei mir läuft parallel ja auch noch ein Stream bei euch möglicherweise nicht und diese Zahlen sind also jetzt nur repräsentativ in der Kombination die ich
- hier aufschreibe be euch sind die natürlich dann unterschiedlich so jetzt können wir das ganze Spielchen noch beschleunigen
- multiprocessing ist so die nächste Gangart mit der man sich dort auseinandersetzen kann mach mal die Kamera hier an
- wills oder multiprocessing kann ich mein Programm in mehrere kleine unabhängige Abschnitte teilen lassen die dann völlig losgelöst
- voneinander ein Ergebnis präsentieren völlig losgelöst voneinander heißt dass hier immer noch eine Abhängigkeit ist ich mache erst ostfalia.de dann Youtube
- dann wieder ostfalia.de dann Youtube jetzt ma ich mal die Tür zu sonst knallit das heißt ich habe eine eine Abhängigkeit ich warte quasi immer bis
- das erste fertig ist und dann lade ich das nächste dann wieder das erste dann wieder das nächste also von der Ablauf her ähnlich
- wie wir das gerade am Anfang auch schon gehabt haben wenn ich jetzt eine Möglichkeit habe mittels multiprocessing unterschiedliche kleine
- Subprozesse zu generieren die das abarbeiten was gerade über ist und nicht auf eine Reihenfolge achten müssen kann ich noch mal um ein Vielfaches
- beschleunigen wir werden also W wir das gleich mit multiprocessing Programmieren merken dass wir dann vielleicht zwei oder dreimal aostfalia.de hintereinander
- wegladen und dann irgendwie einmal Youtube oder zweimal Youtube oder in unterschiedlichsten Reihenfolgen und wenn ich das dann mehrfach ausführe
- kriege ich auch immer unterschiedliche Outputs die Zeit wird etwa gleich sein zumindest ähnlich weil wir kommunizieren ja mit Serversystem und das in Echtzeit
- gerade aber diese Abhängigkeit die wir hier sehen die wird dann tatsächlich sich noch um ein Vielfaches verändern wobei selbst hier schon so zweimal ne
- das gleiche hintereinander gemacht wurde bei Youtube auch aber eben wir wollen das jetzt mal auf die Spitze treiben das ist Prinzip eine Art
- und Weise die ja multiprocessing sich scht am Ende gibt's noch asynchrone Programmierung wir schauen noch mal ob das uns dann auch noch mal genehmigen
- aber die multiprocessing Ebene die ist schon nicht schlecht zu verstehen und sich mal zu gucken also fassen war das einfach mal bei den Hörnern wir
- nehmen wieder eine neue Datei so und speichern die das ist jetzt io underline
- multiprocessing processing PY immer auf acht geben PY und dann habt ihr automatisch auch hier die Umgebung dass es als ein Python
- prramm erkannt worden ist ich ma mal ein Beispiel das Kön müsst ihr jetzt nicht machen ich zeig euch n mal wie es funktioniert wiederspeichern und ich
- nenne das jetzt mal Hallo underline welt. C für die Programmiersprache C drück da mal auf Enter und dann sieh ihr da huch möchtest
- du die empfohlenen Erweiterung für C installieren oh wenn ich das möchte drücke ich hier unten auf installieren und dann wird es nachgepflegt dann kann
- ich das zukünftig da drin benutzen und kann in der gleichen Umgebung auch C-Programme schreiben wenn ich Java haben möchte dann mache ich Java hinten
- dran kriegt dann dementsprechend auch meine Erweiterung hier dargestellt so ich möchte das nicht ich möchte auch das hallo hier nicht sehen sondern ich
- möchte jetzt mich hier mit dem multiprocessing beschäftigen also gehen wir wieder in
- unseren Bereich hinein nein lass es mal von der von der ursprünglichen Form kopieren damit wir sehen was der Unterschied denn auch im
- Programmcode jeweils ausmacht ma das hier mal nach unten ähm also hier in der mainfunktion wird sich glaube ich nichts mehr ändern das ist einfach mit der Zeit
- und der Duration das ist okay wichtig wird jetzt halt eher der Part da drüber sein indem wir gucken müssen dass wir die Dinge miteinander
- verzahnen so das heißt in unserem Beispiel für das multiprocessing müssen wir ja eigentlich nur einen Import hinzuführen
- Import und das ist multiprocessing wird hier schon ausgewählt rein damit und dann kann ich loslegen ich definiere einfach aus Sicherheitsgründen weil ich
- ein vorsichtiger Programmierer bin hier mal eine Session schon mal rein Session und die ist gleich non den non Parameter kennen wir ja a schon ausdrücken
- entweder true false oder non er ist hier also zum jetzigen Zeitpunkt noch nicht deklariert wir wollen wieder eine globale Session generieren das heißt wir
- nehmen unsere Definition Set global Session also die ist jetzt wirklich
- global weil wir mehrere kleine Unterprogramme jetzt erstellen lassen und in dieser machen wir uns die Variable zu nutzen die wir oben schon
- deklariert haben als eine globale Variable so dann if not Session also wenn dieses tatsächlich
- irgendwo nichts beherbergt also eine Null beherbergt dann erzeugen wir eine neue Session und die ist mit unseren
- requests. Sessions so wie wir das vorhin schon kennengelernt haben dann abgegolen das heißt diese ganze Funktionalität hier sorgt eigentlich nur dafür dass ich
- eine globalen Counter bekomme eine globale Übersicht über die vielen kleinen Elemente die ich da drunter liegend ansetze so mein download site
- und download all Site ist jetzt wieder ein Punkt da muss ich Anpassung vornehmen also gucken wir uns das an wir haben hier beim downloadsite Session und
- get URL und Response das sieht ganz gut aus der Print sieht auch ganz gut aus aber wir sollten vielleicht hier noch mal eine
- Kleinigkeit hinzufügen die besagt dass wir dort auch den Namen weil ich habe ja jetzt
- unterschiedlichste Prozesse die dann laufen dann möchte ich vielleicht auch den Namen des Prozesses mit integriert wissen das heißt wir gehen hier in den
- respon hinein und sagen Name ist gleich das ist eben ein multiprocessing current Prozess und davon wollen wir den Namen gerne haben
- wollen also am Ende nur sehen dass dieser Name tatsächlich auch irgendwo Programm hat das heißt bei der Bedingung hier machen vor dem read noch die gch
- Klammern rein und sagen das ist jetzt hier mein Name Doppelpunkt read dazu dann sieht das auch schick aus und das ist mein
- Content der bleibt erhalten und meine URL die bleibt auch so erhalten soweit so gut dann dieses ganze mit der Session das haben wir hier jetzt auch schon
- weggemacht das heißt das können wir hierand neu schreiben with auch wieder
- multiprocessing in dem Fall ein Pool an Elementen mit einem initializer also einem
- initialisierer der aus unserer Set global Session herauskommt und das ganze machen wir als ein Pool also s Pool Doppelpunkt und das
- gibt uns jetzt zurück auch wieder wie wir das gerade schon kennengelernt hatten aber in dem Fall ein Pool Map und Klammer auf Klammer zu Download die
- Sites und die Sites an sich so jetzt mal gucken na wo ist mein Cursor da das sind zwei zahencode das
- sind 3 wir haben hier noch was geändert ich zähl das mal dazu sind 4 5 6 7 8 ne Zeilen weil wir ängstlich sind und im Import sind wir bei 10 zeilencode
- Änderung die vertretbar sind also so viel mehr ist es eigentlich nicht geworden wir haben Hal gewisse Dinge verändert W mal schauen wir haben jetzt
- 28 lines of code und beim ursprünglichen hatten wir 20 lines of code also wirklich nicht sonderlich viel mehr beim threading hatten wir am Ende 30 Zeichen
- oder 30 zahlen das war so tatsächlich schon das Maximum gucken mal was wir da als nächstes machen so die Funktion bleibt erhalten bleibt also alles
- gleich der Interpreter sagt uns auch dass das soweit in Ordnung geht wenn wir das machen unsere Session hier wieder hoch ich ma clear hier rein damit wir da
- wieder von Null starten und wir hatten jetzt 46 Sekunden 8 Sekunden und jetzt wollen wir mal gucken was geht wenn wir mal so richtig wie Erwachsene
- programmieren dann kommt hier ein Request optional missing required downlo seit mal gucken das ist die
- Zeile Downloadzeit get Session current process Name
- Session das haben Wiro ist mein Cursor missing one
- required ja ist ja klar den brauchen wir ja nicht mehr den haben wir ja hier drin ne den brauchen wir nicht den Parameter den haben wir ja da drüber schon über
- diese global bekommen wir ja das das heißt da müssen wir kein übergabewert haben und das heißt eigentlich auch dass wir
- das [Musik] dann an der Stelle auch nicht mehr brauchen ja genau das sollte jetzt
- funktionieren speichern wir das noch mal und führen das versuchen das noch mal auszuführen hier noch mal UPS clear rein und dann führen wir das aus gucken
- was passiert bum 3,2 5 wenn wir ehrlich sind ne also da ist noch mal was drin
- gewesen das ist jetzt so
- was haben wir jetzt gesehen erstmal haben wir gemerkt so real life Problemlösung ist gar nicht so schwer wir können eine Webseite besuchen wir
- können Zeitmessungen machen wir können auf unterschiedlichste Arten auf ein Ergebnis schließen und mit den bmitteln die wir ja schon aus der Veranstaltung
- her kennen konnten wir eine ein Programm schreiben dass immer mal wieder eine Webseite aufruft und das nacheinander tut 160
- ne ist es vielleicht kein Real Life Problem aber es soll ja irgendwelche websroller und so weiter geben wie Google die jede se Webseite eben mal
- anhusten und runterladen und analysieren und so weiter und so fort also auf die Art und Weise kann man sich das Leben deutlich angenehmer machen indem man auf
- das Ergebnis nicht knapp eine Minute warten muss sondern nur noch 3 Sekunden das ist ein Unterschied weil wenn ich das jetzt nur mit zwei Webseiten mache
- dann sind 3 Sekunden ma ich mit vier Webseiten ist es vielleicht das Doppelte oder das Dreifache oder ähnliches aber es ist eben nicht das sechs oder
- achtfache das ist schon enormer Unterschied und wenn ihr später in euren Projekten eben auch auf einer Hardware die multiprocessing oder threading
- ermöglicht arbeitet dann seht ihr automatisch auch dass mit vielleicht wenigen zeilencode ihr deutlich mehr in einer Kürze der Zeit erledigen könnt
- denn es ist ja nicht so dass wenn das Programm nichts tut dass das in irgendeiner Art und Weise gut ist sondern es soll ja
- maximal viel in der Zeit erledigen wenn ich eine Minute zur Verfügung habe dann soll auch eine Minute ausgenutzt werden nicht 3 Sekunden arbeiten und
- 57 Sekunden warten das wäre blöd hier haben wir ein mehrstufiges System geschaffen wie gesagt erstmal angefangen mit wie funktioniert die Dampfmaschine
- was sind so die rahbedingungen mit denen man arbeitet und gleichermaßen haben wir auch eine weitere Entwicklungsumgebung kennengelernt und ich denke mal ihr
- werdet auch merken dass mit einer Entwicklungsumgebung mit der ihr zurecht kommt ich nutze gerne Visual Studio Code ihr könnt pcharm nutzen ihr könnt auf
- einer Wordpad Datei arbeiten bitte gol ja dann dann ist pcharm jetzt doof nein also
- alles hat so irgendwo seine Daseinsberechtigung früher habe ich sehr gerne mit Eclipse gearbeitet es wird
- auch wahrscheinlich niemanden großartig was sagen ich weiß nicht was die Kollegen in kust machen im zweiten Semester hab der dann ja Java ob das
- dann Eclipse ob das itellij ob das was auch immer ist ich habe keine Ahnung weiß ich nicht ich würde es damit machen m einfach aus aus aus dem Grund heraus
- wenn ich mal so schaue mein Tagesablauf mit programmieren ist ja irgendwann mal genauso einer den ihr auch haben werdet und dann werdet Ihr Dokument schreiben
- ich schreib viele Dokumentation nur noch mit Markdown weil ich keine Maus brauche um irgendwelche Dinge fett oder kursiv oder was auch immer da zu stellen also
- ähnlich wie Wikipedia ja aufgebaut ist dann nutze ich latech ganz oft um vor allem auch Dokumente zu erzeugen die
- dann fancy aussehen also wirklich gut aussehen Plots ma ich fast ausschließlich mit cborn und und Python dann ma ich 4 c Programmierung C++
- Implementierung dann gucke ich mir auch gerne mal Jason Dateien an um zu gucken wo irgendwelche persistenten Daten vorkommen oder eben auch nicht und ja
- wir können es anders erwarten ich programmiere damit auch Swift also an Xcode vorbei denn Xcode wenn ich das starte dann sind erstmal 200 oder 2 bis
- 6 GB Arbeitsspeicher Weg die erstmal benötigt werden und wenn ich dann den iOS Simulator noch laufen lasse das ist noch mal ordentlich was weg also das
- sind dann schon ordentlich Ressourcen die flöten gehen wenn ich einfach nur was überprüfen möchte einfach nurw mehr oder weniger analysieren möchte dann
- reicht mir das mit dem Visual Studio Code extremst aus ich habe ein Programm und kann alle diese Programmiersprachen damit abarbeiten ich habe noch VHDL im
- Angebot das ist quasi eine Beschreibungssprache für Hardware um FPGAs und ASIC zu programmieren ne wenn ich da was
- schreiben möchte dann nehme ich ein neues pile wie wir es jetzt gerade kennengelernt haben und ich möchte z.B ein VHDL Programm schreiben dann
- speichere ich das mit pun VHDL im Hintergrund und dann kommt ja dieser Pop-Up wie gerade eben bei C auch ne in der Umgebung habe ich das C hier noch
- nicht aktiviert weil ich noch mit einer Insider Version parallel arbeite das ist quasi wie eine Beta also wenn er bei Microsoft da in dem Insider Programm
- mitmacht dann gibt der automatisch Daten zur Verfügung damit die ihr Programm verbessern können auf der anderen Seite habt ihr gewisse Funktionalitäten schon
- deutlich früher als ja die regulären Nutzer dann auch etwas was ich persönlich sehr cool finde was ich integrieren kann in
- die Umgebung ist ein liveeshare ihr seht das dort unten das ist natürlich ein Werkzeug das muss ich dann zusätzlich installieren ihr könnt also gemeinsam
- über ein liveeshare über das Internet eine Datei sharen oder ein Projekt sharen und gemeinsam daran arbeiten das heißt nebenbei läuft dann in discord
- oder ein was auch immer Call und ihr redet gemeinsam auf dem gleichen Code und könnt auch Änderungen gemein durchführen ohne im gleichen Raum sein
- zu müssen das nutze ich ganz gerne bei Abschlussarbeiten wenn ich die betreue und ein Proband
- prüflink mir ein Code zeigt und den wollen wir gemeinsam analysieren weil irgendwas nicht funktioniert dann gibt's eine Live Session guckt man gemeinsam
- auf den Code und ob ich da nun was rumprogrammiere oder die oder der Proband das ist dann unerheblich weil es auf der gleichen Basis passiert ist ein
- cooles Feature lässt sich wie gesagt in Visual Studio Code alles ganz ganz fein Granula integrieren und ansonsten die Vorteile die ich schon gesandt habe ich
- kann Java ich kann Dings wenn ich mir nur die Dinge anzeigen lassen möchte Java Code sofort Syntax gehighlighted ich sehe das ist grün das ist blau das
- ist lila das ist irgendwas der Farbcode hier der hinterlegt ist den kann man natürlich nur austauschen wenn man möchte aber mir passt der ganz gut also
- ich bin ja farbenblind wenn man da noch mal reingucken hier setze ich mich dann sicher das im
- Stream auf und wenn man da gemeinsam noch mal reingucken ohne dass ich irgendetwas tun musste sind hier ja schon Farben entstanden ne wir haben
- hier unsere Bibliotheken also erstmal der Import mit irgendwie einem rot das seht ihr gar nicht den Import mit den Request das ist
- hier irgendwie so grünlich das ist irgendwie so rötlich wobei es eben auch nicht richtiges rot ist sondern eher so wahrscheinlich lila musst mir sagen ob
- es stimmt weil ich bin ja farbenblin ne aber das passt eigentlich irgendwelche variable die man benutzt ich meine allein nur das ihr habt die Variable
- Session wäht die mal mit Doppelklick aus ihr seht überall wo die jetzt benutzt wird dies ist hinterlegt hier unten ist sie drin da ist sie drin hier ist sie
- drin und so weiter ihr könnt über die drüber Hovern dann seht ihr schon es ist eine Variable Session vom Typ non ihr könnt über das non drüber Hovern dann
- passiert nichts ihr könnt über die bitte das weiß ich gar nicht stimmt bei einer Funktion eben auch hier wird euch
- gezeigt das ist eine Funktion die heißt Set global und die gibt halt nichts zurück weil wir kein return hinterlegt haben ist ja nicht notwendig weil das
- diese Session hier die macht das ja von von uns aus weil der downloadsite wird das gleiche sein gibt auch nichts zurück bei der download all ses wird es genauso
- sein jetzt haben wir hier irgendwie eine mainsting wir haben unsere Seiten das ist also Liste offensichtlich mit Strings drin und ich muss nurüber mein
- Code hier drüber Hovern und kriege das dargestellt also einmal die das Modul time und dann auch noch mal hier die return the current time in seconds the
- EPOC also soweit wir das gestartet haben kriege ich die Zeit zurück war gerade noch eine Frage es geh jetzt um dasus und das
- geht gibt aber ach so okay ja also da muss man sich halt ein
- bisschen mit auseinandersetzen wie gesagt es ist eine Möglichkeit es gibt pycharm es gibt Spider Spider wird in Anaconda sogar mitgeliefert
- ähm die ist sehr für Schulungszwecken also da ist dann auch so eine Sache wenn ich Variablen deklariere kann ich mir dann angucken
- welcher Zustand die Variable hat zu welchem Zeitpunkt das schon fast Debugging das kann ich mit hil helferlias die ich
- hier hinzufüge genauso realisieren ich kann sogar nicht mit dieser Version nur mit der Inside Version Jupiter Notebooks öffnen in Visual Studio Code
- die sehen dann genauso fancy aus wie hier also alles mit schwarz weiß also alles irgendwo so ein bisschen frischer und moderner aber von der Art und Weise
- her absolut identisch einzige Vorteil der den ich sehe in der Nutzung von Visual Studio Code mit
- den Jupiter Notebooks ist dass immer dann wenn ich etwas ausführe auch gleichzeitig die Zeit angegeben wird wie lange die Ausführung benötigt hat wir
- hatten ja so ein paar asterics also ein paar Sternchen wenn wir z.B imports gemacht hatten open CV war ja so eine größere Bibliothek die auch etwas länger
- gedauert hat dann ist es vielleicht interessant zu wissen dass das jetzt 6 Sekunden
- gedauer so dann gucke ich mal ob ich euch noch mal was anderes zeigen kann
- ich das jetzt mal hier rüberziehe das müssen wir jetzt nicht gemeinsam machen das ist einfach jetzt noch mal die absolute Königsdisziplin ihr merkt auch
- da kommen jetzt hier mit klein Session und mit append und gather und so weiter einiges zusammen das ist aschrone Programmierung völlig over the top also
- deswegen ne machen wir das jetzt nicht gemeinsam wir gucken uns quasi n das Endergebnis an hier hat sich nichts geändert das
- bleibt bis auf das hier eine asynchrones Event ein Event Loop eine Schleife run until complete also das wird jetzt so lange berechnet bis das ebenall
- tatsächlich vollständig ist das sind tolle Sachen die kann ich auf Servern machen wenn ich also ein Serverfarm habe und ich kann da maximal parallelisieren
- dann kann ich eben D 4 f Server nutzen die vi F thres parallel ausführen können und die teilen sich dann die Aufgaben untereinander auf und das Ergebnis ist
- dann noch mal um ein viaches schneller ob das so ist oder ich der Lüge bezichtigt werden muss gucken wir uns einfach noch malim Output an vor wir da
- ins Detail gehen aber m read non genau S 4 Sekunden ein bisschen drüber aber ihr merkt schon
- hier wird etwas heruntergeladen ne Apple Apple Apple und [Musik]
- irgendwann genau wen man die 80 erhöht hab klar wenn ich jetzt sage das sollen jetzt keine Ahnung 200 sein kann ich auch machen einzige was ich hier habe
- ich habe Apple genommen anstatt Youtube das ist mein Musterlösung sozusagen die wir jetzt hier betrachtensonst ist
- dasselbe noch car rein untenens UPS unten vor allem al Kommandozeile hier unten also wenn wir da keine Erfahrung mit der Kommandozeile haben ich kann mir
- hier über LS auch angeben was sind hier für irgendwelche list dictionaries mkd für make dictionaries also die ganzen Unix
- Befehle um auf der Kommandozeile irgendwas zu machen die funktionieren hier unten halt auch jetzt ma ich mal 200 Webseiten und fre das
- aus was dann passiert wahscheinlich bin ich deutlich unter den 46 Sekunden 8 Sekunden 400 Webseiten
- parallel quasi analysiert das ist das was Google macht asynchron auf Serverfarm die hen sich alle Webseiten runter laden die
- irgendwo analysieren die im späteren und das eben in Sekundenbruchteilen wie Google angefangen hat waren ja Rechner graue
- Büchsen man hat eine Webseite besucht sich den Inhalt runtergeladen den gescramblelt und dann irgendwelche Parameter gesetzt sagt okay das ist eine
- Webseite die ist für education das ist eine Webseite für das und das und das mittlerweile sind das Sekundenbruchteile jede neue Webseite die ihr über was ich
- und wie die ganzen letztendlich heißen erzeugt mit einem WordPress oder was auch immer sind innerhalb von Sekunden Google gelistet ist gar kein Problem sie
- haben Hal nur nicht die hohe Ranking weil offensichtlich auf der Webseite dann ja auch noch nicht so viel los war ne aber wenn da was los ist dann wird
- das natürlich auch ins Ranking integriert so da wir aber ändern was bitte noch mal in Youtube damit vom gleichen sprechen ich
- füre es einfach noch mal aus ja jetzt kommt hier gleich der Fehler wen auf Youtube wechselt wird er merken das kann er nicht
- auflösen Buff das kennt er nicht und jetzt noch mal jetzt funktioniert das
- auch a hatten wir eben gerade jetzt sind auch acht also irgendwo scheint die Apple Webseite und die YouTube Webseite ähnlich gut angebunden zu sein ans
- Netzwerk aber wir können eben in 8 Sekunden locker das doppelte an Webseiten abrufen als wir mit unserer
- ursprünglichen Lösung konnten ne unsere ursprüngliche Lösung hat fast eine Minute gedauert wir treiben es jetzt mal und sagen hier mal das sind jetzt
- 1000 nur zu gucken ob ich auf die Art und Weise also wie viel ich mehr in der gleichen Zeit erledigen kann 40 Sekunden ja wahrscheinlich
- ne ja man darf ja nicht vergessen h läuft nebenbei Screen Stream ne also das ist schon Scheller ja
- ja passiert jetzt noch was oder habe ich mein Programm zum Absturz gebracht noch bewegt sich ein Cursor so da haben wir 36 Sekunden 2000
- Webseiten Aufrufe 36 Sekunden wir hatten gerade 46 Sekunden für genatte 160 Stück ne also da geht einiges und wenn wir das Skalieren es ist ganz oft so dass bei
- einer einzigen Überprüfung dieser Unterschied zwischen 2 Sekunden und 0,2 Sekunden ja gar nicht so richtig groß erscheint wenn ich das aber immer
- wiederkehrend mache dann ergibt sich natürlich ganz klar auch auf auch für den für den letzten Zweifler die Erkenntnis dass das eben nicht dass
- das auf jeden Fall um ein vielfaches besser ist diese Lösung geändert an unserer Logik haben wir nichts wir haben also wenn wir ganz ehrlich sind eine
- Anforderung bekommen ich habe euch natürlich jetzt dort gezeigt wie es funktioniert aber wenn ihr diese Anforderung bekommen hättet hättet ihr
- irgendwas programmiert und hättet wahrscheinlich einfach vielleicht die erste Lösung vielleicht die zweite Lösung oder was auch immer etabliert
- jetzt haben wir hier vier Lösungen und der Kunde kann entscheiden welche er haben möchte hat eure Maschine Multicore also
- hat die mehrere Prozessoren ja dann ist vielleicht Trading schon nicht schlecht hat eure Maschine wirklich auch viele Cores die auch gehyperthreatted werden
- können also vielleicht Intel Prozessoren oder M1 Prozessoren von von Apple die können das auch sehr gut dann ist vielleicht multiprocessing cool und je
- nachdem was für Ressourcen ich zur Verfügung habe kann ich dann munter auswählen das ist nur ein können natürlich ganz ganz viele andere
- Sachen auch machen denn wir haben jetzt Webseiten aufgerufen wir können am Ende ja auch irgendwie wie oft in der Sekunde kann ich eine Flamme erkennen ne wenn
- ich das mit swatz mache kann ich das wahrscheinlich häufiger machen als wenn ich das immer sukzessive durcharbeiten jedes einzelne Bild und dann habe ich
- das eben nur 30 mal die Sekunde weil meine Bildauflösung 30 Mal in der Sekunde auflöst ich könnte das einmal mit
- bildverarbeitenden Prozesse machen einmal mit ml und dann analysieren inwi weit diese Dinge sich möglicherweise auch noch zusätzlich beschleunigen
- lassen und über das selbe threading System könnte man dann quasi auf zwei verschiedene Codes gleichzei a genau ich könnte einmal auf dem neuen Bild
- Arbeiten einmal noch auf dem alten wenn ich denn möchte um zu gucken ob sich die Flamme bewegt hat z.B ob es eine fater Morgana ist oder ob tatsächlich etwas da
- ist also wenn auf zwei aufinander Folgen oder drei aufeinander folgenden Bildern an einer ähnlichen Position eine Flamme entdeckt worden ist dann kann man mit
- sehr hoher Wahrscheinlichkeit sagen dass das korrekt ist wenn aber in einem Bild eine erkannt wurde im darauffolgenden Bild wieder keine im daraufolgenden Bild
- wieder auch keine dann hat er irgendwas gesehen aber vielleicht nicht das richtige und das kann ich mit FRS relativ gut auslagern das ist auch kein
- riesen Hexenwerk ne also was ich brauche ist eben dieses hier und dieses concurrent ja das ist einfach nur dass ich die
- thres auch nebenläufig machen kann das ist ein Vorteil wenn ich Multicore habe also ich glaube keiner hier im sa hat einen Prozessor in seinem Notebook
- verbaut der nicht über mindestens ein du corore verfügt und alles über DuoCore funktioniert mit den concurrent eigentlich relativ gut kann ich also
- wirklich ins Volle gehen wenn meine CPU 8 Kerne hat dann kann ich ja voll voll R gehen und dementsprechend auch meine worker noch hochsetzen können jetzt noch
- ein bisschen dran spielen dass wir sagen okay wir wollen unsere worker hier noch mal hochsetzen ich sage Anzahl der worker ich ze verdoppel das
- mal clear dann probieren wir das auch noch mal aus vielleicht habe ich in Effekt vielleicht nicht denn diese Zahl
- ist noch was ja ne das das sind noch die 160 Seiten genau also eben hatte ich threats mit 5 jetzt habe ich mit 10 erhöht ich bin bei
- 4,5 Sekunden gelandet also offenkundig ist das ein Effekt kann ich al define variable oben einfach definieren wie viel worker ich haben möchte sage ich
- mal ich wieder ich verdoppel das jetzt noch mal ich gehe mal auf 100 zu gucken ob ich irgendwo eine Grenze habe an der es einfach nicht mehr
- schneller wird so es wird zwei noch schneller so machen wir mal verdoppeln was auf
- 200 so jetzt habe ich schon so ein bisschen Schluck auf drin jetzt wird's wieder langsamer jetzt fängt's an dass das Synchronisieren der einzelnen
- Threads länger dauert als der Vorteil zu parallelisieren0 was wie sieht mit0 aus probier mal aus jetzt hat er eventuell
- das Problem gehabt dass er hat als ja aber das sind so Dinge das ist jetzt
- auch Hardware denn wenn ich über diverse Cores verfüge und dann dementsprechend viele thres pro core machen kann ich glaub 12S ist pro cor durchaus machbar
- dann komme ich irgendwann 16 teilweise auch muss man Hal in Prozessors nachsehen wie viel FRS der kann ja ja schon einiges ja ja schon
- einiges aber das wäre jetzt eben so ein Punkt wo man sagt okay man macht die threading und jetzt fangt man an die worker ein
- bisschen hochzusetzen irgendwann kommt man so eine Schallmauer wo es langsamer wird und dann guckt man mal auf welcher ich sag mal geraden Zahl man dann bleibt
- ne 100 schien jetzt ganz gut zu sein wir können jetzt ganz sukzessiv auch sagen wir gehen jetzt auf 150 nur um zu gucken ob es irgendwie wieder in diese 2
- Sekunden reingeht die wir gerade hatten na es wird wieder besser ähm gehen wir mal auf 140 vielleicht wird's noch besser merken uns mal die Zahl
- 3,4 3,0 schon nicht schlecht also das wäre jetzt so der Punkt das ist erheblich das ist 0,4 besser das ist schon ordentlich
- könnt man meinen das ist jetzt mein Endergebnis fertig verkaufen Kunde gibt mir Geld dafür und dann ist die Sache geritzt ne also richtig entwickeln ist
- ja nicht nur das was wir hier machen mit Syntax und Semantik und dann richtig entwickeln heißt ja auch ich habe eine Lösung und dann muss ich die irgendwie
- bewerten ist die gut oder ist die schlecht das kann ja vielen unterschiedlichen Dingen tun nämlich erstmal zu schauen tut sie das was sie
- soll ne siet Webseiten runter ja sie tut was sie soll macht sie das aber auch schnell das ist eben die Frage das haben wir hier versucht mit diesem Programm zu
- klären denn dieses ganze mit Time und duration und so ein Spaß ist ja quasi wie so ein testbett das wir definieren um zu überprüfen wie schnell es geht
- möglicherweise wenn ihr nur Webseiten runterladen sollt dann fehlt ja diese time duration intereration dazwischen vollständig also ihr lest es nicht aus
- und ihr habt dann keine Maßeinheit wir sprechen dann von Metrik die eben sagt ist das ganze jetzt gut oder schlecht und es gibt in der Informatik V mal eine
- Pause machen das wird ja wichtig ne ich merke schon in der Informatik gibt's halt unterschiedliche Metriken eine Metrik
- ist die Beschleunigung oder die Geschwindigkeit von meinem Programm dann kann die Beschleunigung natürlich auch nicht weit her sein denn wenn ich weiß
- wie schnell mein Programm ist dann kann ich zwei unterschiedliche Varianten überprüfen und eine davon ist immer schneller als
- die andere manchmal ist es so dass man schon bei den Datentypen merkt dass man es igen kann wenn ich ein Integer nehme
- dann ist dieser integer abhängig von meinem System habe ich 64 Bit System ist mein integer 64 Bit groß verbraucht also so und so viel Speicher wenn ich weiß
- mein integer am Ende ich gucke sowieso nur ob es 0 bis 255 in wert ist dann kann ich auch gleich sagen u in 8 also ein unsign Integer der Breite 8 Bit ne
- wenn er dann irgendwie 256 anzeigt dann wissen wir schon es ist ein Fehler das würde dann der Interpreter auch schon bemerken und ich brauche nicht so viel
- Speicherbedarf ich bin also ergo wenn ich das sukzessive mache auch schneller dann Performance Parameter die haben wir jetzt gerade kennengelernt dann gibt's
- noch area area ist so eine Sache ähm also der Platzbedarf eines Programms wenn ich mir ein Prozessor angucke unter Mikroskop dann gibt's da
- unterschiedliche transistorfelder das ein bisschen Speicher da ist eine Grafikkarte drauf und so weiter und so fort und mit mittlerweile sind wir bei 5
- Nanometer glaube ich Technologien das heißt auf mein prozessorstück passen mittlerweile x viele Transistoren drauf so und wie viele davon eben für was auch
- immer benutzt werden das ist dann der Bereich der Area die man auch als Metrik ansetzen kann vielleicht nicht unbedingt bei einem PC und vielleicht eher bei
- einem Mikrocontroller aber es ist eine Art mit der man handhaben kann so Performance area und dann gibt's noch ein weiteren das ist power die power
- consumption wenn ich nämlich das hier berechne also meine CPU verbraucht ähnlich viel Spannung wenn sie auf 100% läuft wie wenn sie irgendwie geeidelt
- ist ähnlich heißt da gibt's Varianten natürlich aber man könnte jetzt natürlich mal messen also Notebook an
- Messgerät anschließen um zu schauen wie viel Watt hat meine Lösung denn jetzt verbraucht ist die am Ende eben vielleicht
- langsamer als die Variante zuvor aber sie verbraucht irgendwie auch nur 3% der Energie das ist vor allem dann interessant wenn ich Systeme baue die
- mit einem Batteriesystem ausgestattet sind also ein Akku das heißt ich kann nicht alle Konzepte die ich hier anwende auch unmittelbar auf ein Smartphone oder
- ein Tablet anwenden weil das S andere Systemkomponenten sind hier Stecker dran zack 100% Leistung wenn es ein bisschen laut wird hier im Raum dann
- liegt das am Lüfter weil es ein bisschen warm geworden ist in der CPU aber das war's dann auch wenn ich mein Telefon in der Hosentasche trage und das macht
- gerade irgendwas wie E-Mails checken und mir wird dementsprechend die Hose so richtig warm weil ganz viel Energie verbraucht wird dafür dann ist das nicht
- effizient das nent man dann in der Literatur sehr gerne die drei also PPA Power Performance und area area ist für uns als pyonentwickler fast zu
- vernachläs wir können es nicht verändern die CPU ist so wie sie ist wir können vielleicht ein andere auswählen aber wir kön sie nicht selber entwickeln oder was
- auch immer das heißt Performance und vor allem Power sind zwei Metriken die wir sehr sehr gut unterscheiden können und Performance ist für ein PC super ne
- maximal viel in einer kurutze der Zeit erledigen Power ist für Mikrokontroller und für Digitalisierungsprojekte gut wo man vielleicht Raspberry Pi hat der
- vielleicht über einen Akkusystem also eine Powerbank betrieben wird und das eben nicht den ganzen Tag kann weil er irgendwann die Powerbank leer gelutscht
- hat ne und in dem Sinne machen wir jetzt erstmal eine Pause ne [Musik]
- [Musik] also
- [Musik] [Applaus] [Musik] [Applaus]
- [Musik] [Applaus] [Musik] [Applaus]
- [Musik] [Applaus] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Musik] [Applaus]
- [Musik] [Applaus] [Musik] [Applaus]
- [Musik] [Applaus] [Musik] [Applaus]
- [Musik] [Musik]
- [Musik] [Musik]
- [Musik] [Applaus] [Musik]
- so dann wir ja fast bis 17:30 jetzt durchziehen spaß beiseite
- m Objektorientierung ist das letzte was uns noch fehlt Objektorientierung und eine ganze Menge
- Spaß mit und ohne Objektorientierung aber letztendlich ich kann euch von der Syntax nicht mehr viel beibringen das
- ist jetzt vorhanden ich kann euch von der Semantik noch so ein paar Kniffe zeigen wie z.B das was wir gerade gesehen hatten
- der Rest muss von alleine kommen also um es auf einen Punkt zu bringen programmieren lernt man nur indem man es macht wenn man ein Programm oder eine
- Programmiersprache bei Amazon einträgt dann kriegt man 500 Millionen unterschiedliche Bücher und da steht dann Python in 21 Tagen oder Python der
- Kurs in 3 Stunden ja die ziehen dann aber auch in D Stunden richtig durch und das ist nicht jeder Mann und jeder fraus Sache also von daher
- programmieren wirklich zu lernen heißt ganz ganz viele Fehler zu machen und Fehler sind in dem Fall wirklich nicht schlecht also auch wenn es immer heißt
- wenn man ein Testcase hat und wenn der fehlschlägt dann ist das blöd ja aber letztendlich wenn er fehlschlägt weiß man eben was man verbessern kann das bei
- der Programmierung genauso haben wir auch gesehen ne nach besten Wissen und Gewissen alles irgendwo niedergeschrieben und dann irgendwo noch
- mal eine Zeile verrutscht oder dies oder das oder jenes das passiert dem besten bloß zu erwarten dass ich in einer grundlagenveranstaltung im ersten
- Semester danach als Profi ihr seid alle Profis keine Frage aber mit diesem Wissen jetzt wirklich extern anfangen kann Geld zu verdienen das muss man ein
- bisschen versuchen voneinander zu differenzieren da müsst ihr euch selber Programme einfallen lassen ausprobieren deswegen ist die
- Digitalisierungsprojekte auch gar nicht so schlecht ihr müsst jetzt mal anfangen bisschen das alles zusammenzubringen und mal zu überlegen wie kriege ich diese
- vielen Informationen die ich jetzt gelernt habe mal konkret umgesetzt in irgendeinem Projekt ob ich nun am Ende eine Kerze erkenne oder ein Flächenbrand
- ein Waldbrand oder implodierten Planeten oder sowas das ist dann einfach anforderungsgeschichte die kleinen
- Zahnräder die habe ich euch jetzt alle gezeigt eins dieser ganz großen Zahnräder die wiederum ganz viele kleine Zahnräder bewegt das ist die
- Objektorientierung da werde ich mir jetzt richtig viel Zeit lassen ich werde so ein bisschen introduction teasing jetzt heute im zweiten Block machen wenn
- ich irgendwann merke ihr fallt rückwärts um oder habt Atemnot unter der Maske dann ist das auch in Ordnung ne weil das ist jetzt wirklich noch mal ein riesen
- Batzen oben drauf also wenn man das in irgendeiner Art von Bildsprache übersetzen möchte dann habe ich euch jetzt gerade so und so viele Python
- Bücher hingelegt und ihr habt das gerade abgearbeitet so gut fertig und jetzt komme ich noch mal mit so einem riesen Welzer und legt den oben drauf das ist
- die Objektorientierung für viele ist das echt ein Problem in Java ist es systeminerent das heißt die Objektorientierung ist bei
- Java einfach Bestandteil das wird euch dann auch im zweiten Semester deutlich zugute kommen dass ihr schon wisst was ist eine Datenstruktur was ist
- eine Variable was ist ein String was ist character was ist ein float ein Double und so weiter und vor allem auch was ist Objektorientierung letztendlich das ja
- ganz oft in den Kurs gemacht dass ich euch Dinge gezeigt habe ohne dass wir da ein großes Verständnis von hten wir haben Funktion benutzt ohne zu wissen
- was eine Funktion ist wir haben Methoden verwendet ohne zu wissen was eine Methode ist wir haben
- Objektorientierung wenn man ganz ernst ist und bisschen auch gemacht weil wir eben auf bestimmten Klassen gerade eben z.B zurückgegriffen haben die aus einer
- Bibliothek herkommen und dementsprechend gewisse Methoden bereitstellen im Begriff Klasse haben wir noch nicht definiert und auch viel andere Dinge
- nicht ich werde vorschlagen ich gehe jetzt mal wieder eine Etage tiefer und dann fangen wir einfach mal an munter glaub das kann ich auch glaube
- ich ganz gut entweder noch mal hier drin machen oder im Jupiter Notebook das schaue ich dann mal wie es besser passt jetzt letztendlich geht's jetzt gerade
- da drum ein Verständnis aufzubauen ne und ich denke das wird bei dem einen oder anderen auch sofort Klick machen denn diese Objektorientierung die ist
- halt ja wie soll ich sagen es ist eine Sache entweder man versteht es sofort oder man versteht es ein bisschen später man wird es immer
- verstehen nur es ist so ein bisschen eine Geschmackssache die einen entwickeln sehr gerne Skripts das startet oben
- endet unten total sauber total simpel vor allem auch immer wieder holbar und wenn ich nur wenige Variablen oder imports benutze ist das auch tatsächlich
- relativ überschaubar wenn ich aber jetzt anfange z.B mit Datenbanken oder mit anderen Highlevel und High Class Funktionalitäten dann
- fange ich an in Schwierigkeiten zu kommen wir hatten das in Kurs schon indem ich z.B dictionaries eingeführt hatte da haben wir dictionary Spezies
- was wei ich Tier und das kann ein Hund sein oder irgendwelche anderen Funktionalitäten und die sind dann einer varable zugeordnet worden irgendwann 20
- 30 Zeilen später weiß ich ja gar nicht mehr wie diese Deklaration von der Variable da drüber ausgeschaut hat das heißt ist es jetzt Index 0 ist es key
- value 1 2 oder was auch immer da liegt so ein bisschen die Tücke im Detail mit einer einem anderen programmierparadigma näich von der
- prozedualen oder sequentiellen Programmierung zu einer Objektorientierung gibt es sich automatisch ein paar mehr Möglichkeiten
- die wenn man sie verstanden hat einem extremst viel Arbeit abnehmen ich kann schlankeren Code schreiben ich kann naja schlankerer Code bedeutet auch er ist
- komplexer aber wenn ich diese Komplexität eben greifen kann verstanden habe dann ist es in sich geschlossen einfach eine saubere und strukturierte
- Art der Programmierung und alle highclass Programme die ihr Schreiben werdet unabhängig ob es Python C++ Java ist haben Objektorientierung inherent
- und viele Fliegen sich nicht das auf dem Bauernhof genauso wie im hörsal ne wenn es irgendwo ordentlich stinkt und da sind ganz viele Fliegen dann hat das
- irgendwo seine sseinsberechtigung dann ist da irgendwo was was irgendwo von Interesse ist so die objektorientierte Programmierung ist letztendlich eine
- programmierparadigma mit dem Programme so strukturiert werden dass Eigenschaften und Verhaltensweisen in einzelnen Objekten
- gebündelt werden können ich habe also ein Objekt Tier und in dem Tier habe Namen Spezies eine Größe einen Gewicht was auch
- immer und die kann ich sogar noch miteinander verzahnen sprechen dann von Vererbungen ein Tier oder ein Mensch da gibt's ja Mama und Papa und in der
- Programmierung braucht man Papa nicht da macht das die Mama alleine gibt eine Klasse und die hat von mir aus Typ Tier also den Klassennamen Tier und
- vielleicht habe ich dann noch Untergattungen unterspezies und dort Erbe ich die Information die generisch in der Blaupause Tier hinterlegt sind
- stellt euch das wie eine Blaupause vor eine Blaupause ist nichts anderes als etwas dass ich euch gebe wo ich eine Seitenansicht eine Draufsicht eine
- vielleicht noch mit einem bestimmten Winkel behaftete Sicht auf irgendetwas ein Gebäude technische Zeichnung oder ähnliches gebe und ihr könnt es
- vorausgesetzt ihr wisst so ein bisschen wie ihr mit Blaupausen umgeht nachproduzieren W ich e also ein Blaupause gebe von einem Quader der
- Seitenlänge a= 3 cm und B = 6 cm hat und noch so weit voneinander irgendwie die cseite ist die Dicke des ganzen so ein bisschen darstellen kann
- und zeichne euch das in einer Blaupause dann könnt ihr diesen Quader ganz ganz oft nachbauen Haup kein Problem versteht was da drin
- ist und ich bau das nach wenn ich dann Änderungen vornehme dann habt ihr vielleicht drei oder vier Quader schon gebaut und ich sag ne nee jetzt ist die
- Kantenlänge 7 anstatt 6 und dann fangt der an neue Quader zu bauen die anderen sind aber auch schon existiert also ein anderes Objekt jedes einzelne dieser
- produzierten Elemente ist ein für sich geschlossenes eigenständiges Objekt das ist besonders wichtig weil ich ja bei der Deklaration von z.B einer
- Liste oder Tupel oder auch dictionary ja irgendwie man variable Namen habe dann brauche ich den variablen Namen dann brauche ich möglicherweise den key value
- oder den Index und irgendwann weiß ich nicht mehr was habe ich auf den Index gepackt vor allem der Variablen nameame soll ja so gewählt werden dass der
- irgendwie funktioniert ich fange da mal mit dem Beispiel an ich versuch mal mit dem Beispiel anzufangen das
- heißt wir nehmen eine neue Datei und die nenne ich jetzt mal erste Schritte was ist das nee das ist erst neues Fenster ich wollte hier gerne eine neue
- Datei so und die nenne ich jetzt mal oop.p da spielen wir ein bisschen rum
- also Objekt [Musik] Orientierung in Python da machen wir was
- so jetzt schauen wir mal dass wir dort einen Einstieg bekommen wie gesagt wenn die Augen zurückklappen dann weiß ich es reicht hin und werde dann
- dementsprechend auch stoppen aber ich denke mal sind das sind Star Trek Freunde unter euch ja einer wenigstens okay ich bin mal so Star Wars aber mein
- Gott bei bei den Dingen da warum auch nicht ne wenn wir jetzt z.B [Musik]
- einen na ja employees heißen sie amerikanischen z.B Mitarbeiter von der USS Enterprise nehmen wollen da gibt's ja paar die
- kennt man vielleicht es gibt der Kirk es gibt McCoy es gibt es gibt so viele andere Uhura und wie sie alle heißen die haben ja alle irgendwie in den Namen
- vielleicht ein alter vielleicht irgendwie auch ran und vielleicht sogar noch eine employee ID weil irgendwann wird man ja eingestellt und damit man
- eindeutig zuordnenbar ist dann hat man vielleicht noch ein ID in der Vergangenheit haben wir das wie vololg gemacht wir haben hier kirking
- geschrieben ist gleich und dann haben wir eine Liste angefangen gesagt okay ups das ist hässliche Liste wir wollen sie so haben und dort habe ich mein
- Element 1 das heißt das ist glaube ich James heiß ne James KK ja James dann machen wir ganz richtig genau
- t Kirk das ist sein Name dann haben wir ich sag mal wie alt war der 40 was war sein Rang Captain und dann hat er vielleicht noch
- eine ID hat doch immer zi 2000 keine Ahnung weiß ich nicht irgendwas krummes vielleicht ne das heißt ich habe meinen Namen und ich superiere hier noch nicht
- mal zwischen vor und Nachnamen sondern ich habe irgendwie alles zusammen ich habe das Alter ich habe seinen Rang und ich habe irgendwie seine ID cool wenn
- ich jetzt Spock hinzufügen möchte dann ma ich das ähnlich ich habe dann meine Liste hier das ist jetzt Boock ich habe keine Ahnung wie der mit Vornamen heißt
- glaub der heißt nur SP ne CK wir geschrieben der ist keine Ahnung sag mal der ist jünger 35 oder so schönes Alter war ich auch
- mal und der ist Wissenschaftsoffizier wenn schon Deutsch ma m K schreiben
- ne so und von mir aus weil es der zweite Offizier ist hat er 2001 fortlaufen jetzt so schiffarzt McCoy kenne ich noch und dann verlässt es mich dann bin ich
- mit Star Trek tatsächlich wieder raus dann muss ich er Star Wars als Beispiel nehmen ich dann Yoda und dann solo und sowas ne aber ist ja egal so McCoy der
- heißt glaube ich Lennard ne m ist der schiffarzt Pille Pille heißt der glaube ich so und der heißt Lennard ist es mit C oder mit
- T mit T oder mit D ich weiß es nicht ich bring das immer durcheinander McCoy so heißt das so der ist keine Ahnung vergessen wir mal das
- Alter dann haben wir schon erstes Problem wir machen hier mal
- [Musik] medizinischer Offizier und z 2002
- na so nch Brainstorm haben wir jetzt ja schon gesehen das ist so die Art und Weise mit der wir das schon paar mal gemacht wir haben jetzt das Alter
- vergessen bei dem ein das heißt wenn wir jetzt nur auf Indexen arbeiten würden und hätten irgendwo geschudert dann geht's dolle schief weil dann lesen wir
- plötzlich ein String aus oder vielleicht auch nicht das ist also schon mal eine erste Fehlermeldung hätte ich jetzt
- den Wunsch genau einen von diesen anzusprechen ja ma ich print Index von der und der Variable es gibt aber nicht nur drei Leute auf diesem K es gibt
- irgendwie ziemlich viele ich weiß nicht wie viele aber es gibt viele und für all diese müsste ich dann erstmal eine Variable anfertigen und müsste die dann
- auch irgendwie wenn der mal verstirbt was ja passiert auch wieder löschen also raussuchen aus dem ganzen KR das ist schon relativ müsig glaube das könnt
- nachvollziehen und das ist natürlich jetzt ein Punkt wo man merken dass das offensichtlich sich so ein bisschen beißt bei 45 Variablen kein Problem bei
- 5000 wird eng da kann die Objektorientierung helfen indem ich mir das Problem erstmal vor Augen halte think first Code later
- und das Problem kann ja beinhalten dass ich mal drüber nachdenke wie sieht denn eigentlich eine Blaupause für ein Mitarbeiter aus was ist da drin was
- brauchen wir da ich meine ich schreib das mein Kommentar was was wäre denn was ich da brauche Idee Name so was brauche ich noch Alter
- Jang gut ID vielleicht noch mehr gibt's noch was was noch brauchen also eine Blaupause für einen
- Mitarbeiter sein so detailliert wie du werden möchtest Größe Geschlecht
- Geschlecht reicht woll noch jemand mehr h also ich würde ja Name und auf jeden Fall noch mal den Vornamen voneinander separieren Alter Rang ID
- Größe Geschlecht äh Gewicht äh Gehalt geburtstag
- hat noch jemand mehr zu bieten man kann sich immer wieder Sachen ausdenken das ist richtig man muss dann
- aber an jeder einzelnen Liste von diesen 300 Millionen Leuten wenn man sich was neues einfallen hat lassen das wieder nachpflegen ne also wenn ich jetzt sage
- ich habe das hier schon mal gemacht und jetzt fängt es plötzlich an ja jetzt brauche ich Vorname Nachname ich muss jeden einzelnen diese anpassen jeden
- einzelnen das ist maximal Kacke das ist richtig Mist das macht keine riesige Freude und ich glaube das ist auch nichts was man
- irgendwie seinem Liebsten Feind wünscht denn da ist man lange beschäftigt vor allem man hat kein großartigge benefit daraus ne bei der
- Objektorientierung mache ich mir genau das zu nutze ich nehme einen Blaupause für meinen generischen Mitarbeiter der Mitarbeiter der USS Enterprise
- und dann mache ich mir dort eine Klasse nachher noch machen oder nächste Woche oder sowas aber das war schon mal ein gfpür dafür bekommen und das ist meine
- Blaupause diese Blaupause beinhaltet dass ich dort ein Namen vergeben kann ein Vornamen ein alter einen Rang ID eine Größe Geschlecht Gewicht und so
- weiter das Schöne ist dass ich die auch im Nachgang noch verändern kann denn jedes dieser Objekte hat ja dann eine ID und jedes dieser Objekte kann ja
- möglicherweise auch unterschiedlich sein ich kann zweimal Captain Kirk drin haben einmal mit dem Gewicht von 69 kg und einmal mit Gewicht von 22 kg es sind
- zwear unterschiedliche Objekte trotzdem haben die beide den gleichen Vornamen beide den gleichen Nachnamen es soll auch Leute geben die heißen gleich haben
- den gleichen Nachnamen heißen Mustermann und dann gibt's Max den Senior Max den Junior und so weiter in Datenbanken wird das manchmal gar nicht
- auf abgegriffen sondern einfach nur den Vornamen Max mustama und den gibt's ganz oft in Deutschland natürlich kann es sogar sein dass es den gleichen Namen
- auch mit der gleichen Adresse gibt also zumindest der gleichen Stadt es gibt in Braunschweig Wolfenbüttel Wolfsburg sicherlich ganz viele die heißen Schmidt
- Müller oder ähnliches dann gibt es immer den Alpha Kevin immer den Spruch kann ich jetzt hier machen weil beim Kurs keinen haben aber ähm es gibt immer an
- Kevin es gibt meistens ein Lukas es gibt ganz oft noch einen ähm Michael das sind irgendwie so so Namen die sind ganz oft vergeben worden die
- hat man ganz oft vor allem in den kleineren Klassen also Schulklassen ist das oft ein Problem weil dann gibt's Michael 1 Michael 2 Michael 3 ne oder
- Florian 1 floran 2 floran 3 als ich klein war gab's das Problem nicht ich habe offensichtlich ein Namen gehabt der ganz gut ins klassenthema passte
- und ne musste mich mit dieser Thematik nicht auseinandersetzen die Schwierigkeit die haben wir jetzt hier wirklich schon mal erkannt und das ist
- glaube ich auch eins der wichtigsten Aspekte dass wir erstm das Problem erkennen das Problem ist wir sind faul und wir wollen nicht 50 Millionen
- Variablen verändern wir wollen Sie idealerweise einmal verändern und das für alle anderen nachziehen wir wollen eine Funktion schreiben die das macht
- klar ich kann eine vorschleife machen und die macht dann das aber ne ma ich nur einen Fehler habe ich in der vorschleife alle Datensätze
- zerhackt wenn das euer Chef mit kriegt dass ihr den kompletten Kundendatenbank zerstört habt dann ist der maximal sauer und vielleicht sogar zurecht ne gut
- bleiben wir bei der Blaupause wenn ich also jetzt diese Blaupause habe und ich kann jetzt jeden einzelnen meiner Objekte eben
- ähm etwas zugängig machen dann kann ich in diesen Objekten auch jeden einzelnen dieser Teile verändern das heißt ich habe mein Objekt das ist die ID 232 oder
- 2000 das ist Captain KK so Captain Kirk heiratet jetzt aber eine Frau die heißt KK ne so jetzt muss ich nicht eine neue
- Variable anwenden und die bauen dass es jetzt plötzlich auch James Tiberius KK gibt mit dem Alter dass ich möglicherweise ja auch ändert
- ne Geburtsdatum macht dementsprechend mehr Sinn habe ich ja glaube ich auch so reingeschrieben weil dann das kann ich errechnen wenn ich ein alter
- reinschreibe muss ich jedes Jahr irgendwie gucken dass ich das dann ein inkrementiere ist müsig das sind aber Erfahrungswerte
- ne mit so Alter zu arbeiten ist dann schwierig das kann sich aus diesen Sachen aber ergeben so der jetzt geheiratet kriegt
- also neuen Nachnamen fertig klassenaufruf Nachname gleich überschreibe ich Kork KK mit Kork hab
- den gleichen Datensatz neuer Name jetzt ist Captain Kirk so divers unterwegs so auf seiner auf seinem Regenbogen ist er der mein ich bin jetzt kein Männchen
- mehr ich bin jetzt ein Weibchen er sein Geschlecht we weil das toll findet Geschlecht haben wir auch drin gerade sogar
- ausgewählt dann ändere ich Geschlecht gleich Male in female oder in Einhorn oder in was auch immer gibt ja diverse Möglichkeiten mittlerweile und so weiter
- und so fort auch Gewicht wenn ich z.B Datensätze habe in dem das Gewicht auch eine Rolle spielt ich möchte das aktuelle Gewicht haben wird das da
- eingetragen wenn ich den Verlauf von etwas haben Mö speicher ich mir den Verlauf irgendwo Weg ganz gesondert ne solche
- applications die z.B mit so einer Uhr funktionieren die gucken ja auch wenn ich auf die Waage gegangen bin dann gibt's den Tag und die Uhrzeit und das
- Gewicht gehe ich eine Woche später auf die Waage gibt's ein neues Datum und ein neues Gewicht W abgespeichert so und jetzt kann ich schöne Plots machen dass
- ich innerhalb von einem Jahr z.B Lockdown bedingt so zu viel Kilo zugenommen habe abgenommen habe oder sogar gleich gebliebenin das heiß darauf
- kann ich dann analysieren also auch ein Vorteil dass ich mit dieser Objektorientierung auch die Möglichkeit der
- Analyse benutzen kann so naen wir hier Begrifflichkeiten die wir da verwenden werden ich nutze mal eine wir
- werden das wie gesagt nächste Woche ganz ganz ganz ganz fein granuda machen aber die Begrifflichkeiten die Daum benutzt werden ist z.B
- class eine Klasse das ist meine Blaupause und mir ist es egal ob er das Blaupause Klasse oder wie auch immer nennt nennt irgendwann später bitte
- klasse also die Begrifflichkeiten ist eben ist ein anderer Typ es ist keine Variable es ist eine Klasse eine Klasse kann eben Elemente
- beherbergen und eine Klasse kann auch diverse Instanzen besitzen also wenn ich eine Blaupause habe und das heißt ich soll Stifte produzieren dann ist die
- blauprause ziemlich eindeutig dass der 13 cm lang sollen soll die und die minenstärke das und das und dann fangt i an zu produzieren so die erste ist ein
- bisschen zu lang der zweite ist ein bisschen zu kurz der dritte ist ein bisschen zu dick also die typischen Probleme die man immer hat ne die
- Blaupause ist aber immer die gleiche die Art und Weise wie ich sie produzieren soll ist genau dieses maßgeber die Instanzen können feingranulare
- Änderungen haben die einzige Änderung die in der Programmierung vonstatten geht ist dass sie auf unterschiedlichen Adressen in meinem Speicher gespeichert
- sind aber das ist schon eine Änderung das heißt ich habe ein Objekt das heißt a ich habe ein zweites Objekt das heißt auch a und ich habe ein drittes Objekt
- das heißt auch a alles drei unterschiedliche Instanzen aus meiner aus meiner Blaupause heraus die
- zufälligerweise den gleichen Namen haben aber können unterschiedliche Inhalte haben ne kann anderes Geschlecht andere ID oder was auch immer sein irgendwas
- ist auf jeden Fall unterschiedlich so machen wir wir machen mal eine Klasse die nenne ich jetzt mal dog und mache einfach mal Pass Pass heißt ja nichts
- anderes als dass da was passiert ne da ist jetzt noch kein großartiger Inhalt drin möglicherweise möchte ich dem der Hunderasse oder der
- Klasse Hund ja irgendwas mitgeben es gibt ja unterschiedliche Rassen im englischen sind das ja breeds da gibt's Jack Russel terer weimaranaer
- Schäferhund unendlich viele unterschiedliche Rassen wenn ich jetzt jedes Mal da die Rasse eintragen muss dann wird das sicherlich schon relativ
- mühselig wenn ich aber die Rasse in einer Klasse vielleicht vordefinieren kann und sage die Rasse ist eigentlich jetzt immer erstmal Typ Hund und wir
- tragen jetzt erstmal nur Jack Russel terer ein dann ist das so dann ist das eine Variable oder ein Teil von dieser Klasse Variablen Namen das ist die
- Gattung und die kann ich dainterlegen ich muss bei diesen Dingen eine Kleinigkeit beachten machen wir
- einfach schon mal ich habe in der Klasse eine Definition also eine Funktion die underline underline init ich guck mal ob die hier schon erscheint genau hier habe
- ich nämlich schon die Möglichkeit das dann auszuwählen ich muss wenn ich das mache seht ihr das automatisch schon mal non dazu kommt also in S und ansonsten
- das Ganze eben non kann man so machen ich find es schöner wenn ich die Inhalte gleich hzugebe die ich dazu packen möchte das
- heißt self ist etwas mein eigenes Objekt mein jetze das auf welches ich zeige mein ja eigenes Objekt und dem gibt's z.B einen Namen und eine ein alter
- machen wir mal einfach der Hund hat einen Namen und der hat ein alter n hier unten ist pas das heißt da steht noch nichts drin so jetzt habe ich ein self
- pun Name istle Name und ein self Punkt Alter ist GLE Alter das heißt immer dann wenn ich
- meine Elemente initialisiere erwartet er dass ich einen Namen und ein alter hinzugeben das self kommt ganz automatisch das ist quasi ein
- neues Objekt das wird im Speicher angelegt und dementsprechend zugeordnet und daraus kann ich dann die unterschiedlichen Objekte wunderbar
- voneinander differenziereni nicht vor in dem Fall ist es ja eine Definition nö die kommen ja dann irgendwann später
- wenn ich die Klasse mit Inhalt fitter momentan ist eine reine Blaupause wenn ich sie dann nutzen möchte muss ich natürlich Inhalt hinzufügen ne also
- damit man mal den Begriff darstellt wir haben self. Name ist g Name das generiert ein sogenanntes Attribut namens Name dem ich einen
- Parameter oder ein value zuordnen kann idealerweise den Namen wenn ich weiß dass es ein Name ist dann ist auch wahrscheinlich für mich schon klar dass
- ich da keine Zahl nehme sondern dass sich wahrscheinlich später auch um ein String handelt und auch beim Alter da gibt's geschmckle da kann ich
- sagen das ist eine Zahl das kann auch sein dass es ein String ist kann float sein etc meine Blaupause bietet mir da jetzt noch nicht
- die Möglichkeiten dass ich feingranular sage es muss unbeding String sein muss unbing Variablen Namen oder eine Zahl sein das Alter genauso self.alter
- generiert auch ein Attribut dem ich einen Wert hinzufügen kann wie alt das ganze ist so die
- innetfunktion die hier integriert ist die sorgt einfach dafür immer dann wenn ich ein neues Objekt generiere aus meiner Blaupause dass ich dem bitte
- Namen und einen Alter hinzufüge dann ist das abgespeichert das ist dann hinterlegt und ich kann dann die Dinge da drin die Objekte Attribute
- ändern W ich also sag hat mein Name hat sich geändert dann mache ich eben meine Klassennamen Punkt und dann eben Name gleich dann eben was
- anderes self auch der self ist immer definiert der ist quasi PY innerend den den muss ich auch immer verwenden sonst kann ich dort mit der Objektorientierung
- nicht viel machen ich ma mal ein paar Kommentare rein dann wird das glaube ich noch ein bisschen klarer denn hier na komm Kommentar das ist eben
- mein meine klassenattribute das der konstr genau das der Konstruktor in dem kann ich auch
- sagen es gibt z.B eine Spezies [Musik] Spezi speies glaub so geschrieben genau und
- das ist jetzt von mir aus irgendwie was ist das und keine Ahnung wird man jetzt irgendwie den lateinischen Fachausdruck
- dafür verwenden das ist mein Konstruktor der der kriegt jeder jedes Element dass ich daraus generiere hat die Spezies Hund ist vielleicht jetzt nicht so super
- aber wenn ich die klassischen Hund nenne n dann macht das vielleicht Sinn dass ich diese Information mit dazu gebe ansonsten das hier unten ist dann eben
- wählbar hier kann ich einen eigenen Namen für mein Objekt nutzen und ein eigenes Alter soweit so gut wenn ich das jetzt
- mal verwenden möchte dann kann ich ja mal gucken dass meine Funktion hier
- unten vielleicht ja mal guck mal ob das jetzt funktioniert
- schwups missing to arguments genau also wenn ich jetzt hier einen Hund unten hinzufügen möchte also Doc ne dann sagt er mir schon es fehlen
- zwei Parameter offenkundig ne jetzt kann ich z.B mal sagen mein Hund der
- heißt buddy ist gleich generiert aus meiner Klasse heraus aus meiner Blaupause Hund und der
- hat jetzt sieht man schon die Mächtigkeit von dem Werkzeug dass jetzt erstmal Name gefordert wird das ist und wenn ich das Komma mache Swit
- rüber und sagt jetzt muss ich dem noch ein alter mitgeben s ich mal der ist 9 Jahre alt wenn ich das jetzt ausführe wow dann ist das passiert das hab keine
- Ausgabe jetzt also ich habe aber jetzt durchaus ein Element generiert so jetzt kann ich natürlich auch schauen dass ich mir z.B das
- ausgebe ist mein Cursor da z.B sage ich jetzt BU jetzt se ich plötzlich Name Spezies und irgendwo hier unten drunter wird
- dann wahrscheinlich auch Alter sein so buy soll mir jetzt mal das Alter ausgeben und wenn ich das jetzt mache dann kriege ich na ist nicht
- dargestellt dann muss ich das glaube ich mit Print machen
- print ja dann krieg ich das Alter zurück und wenn ich sage ich will dann eben das Alter vielleicht sogar noch mal ändern
- das heißt wir machen jetzt hier noch mal weiteren Befehl rein und sagen BU Alter 12 und machen wieder ein print body
- Alter haben hier oben initialisiert das ist unser unser Objekt aus der Blaupause Hund mit allen Informationen also auch die Spezies ist dort mit integriert die
- ist in meinem Konstruktor quasi die ganze Zeit dabei ein konkreten Namen und ein konkretes Alter dieses konkrete Alter lese ich hier einmalig aus ich
- ändere es hier und lese es noch mal aus nach Adam Riese sollte dort 9 und 12 jetzt rauskommen
- n genau und natürlich kann ich mir auch noch weitere Informationen ausgeben lassen
- indem ich z.B body. spees ausgebe da kommt dann am Ende rund bei raus ne das sind die Elemente die kann ich mir dementsprechend
- herausfiltern das ist Objektorientierung ich sag mal die ganz
- ganz ganz ganz ganz ganz Basisinformation ich kann natürlich auch noch mehr machen werden uns dann sicherlich auch noch noch mal andere
- Beispiele heranziehen dass wir dort eben nicht nur mit Hunden und Katzen oder ähnliches arbeiten vor allem haben wir auch noch nicht mit
- Vererbung gearbeitet ne so eine zter und Getter Funktion kann ich natürlich als define in meine Klasse hinzufügen damit ich nicht
- immer das hier machen muss oder kann sagen wir er kann weil wenn ich dort möchte dass da nur Zahlen eingetragen werden mache ich lieber eine
- setterfunktion in der klar überprüft wird dass nur eine Zahl gültig ist und überschreibe somit dann den Inhalt das ist wie eine Datenbank letendlich ich
- kann jetzt hier auf diese einzelnen Informationen zurückgreifen putzig m Spezies das kann ich übertragen ich
- kann die Spezies von BU auch noch mal ändern indem ich sage hier vor body Spezies ist GLE Katze wenn ich das jetzt noch mit dem String
- behafte dann wird das auch funktionieren und jetzt kriegt buy einfach mal eine neue Spezies und ist jetzt eine
- Katze das macht so viel einfacher nicht in jeder Liste die einzelnen Objekte noch mal zu verändern sondern wir haben dann einen
- sogenannten Konstruktor wir generieren uns alle Objekte aus diesem heraus und können dann fortlaufend auch die Information da drin ändern z.B habe ich
- eine klasse Auto oder Vehikel so die hat Kilowatt vielleicht noch Pferdestärken die hat vielleicht eine Größe die hat eine Anzahl von reifen die hat Topspeed
- die hat eine Farbe Anzahl Türen Preis 1000 Informationen und da versuche ich mir die Dinge am Anfang herauszufiltern die wirklich sehr
- generisch für alle Fahrzeuge gleich sind und fange dann an vielleicht noch zu kieren ein Fahrzeug ein weehikel kann ja auch ein bicycle sein das hat
- idealerweise aber nur zwei Räder es gibt aber welche die haben drei Räder ist es dann noch ein Fahrrad oder ist es dann schon ein Dreirad oder oder oder wenn
- ich aber eine Klasse generisch definiert habe und plötzlich merke das reicht mir nicht mehr ich muss noch feing granularer werden dann muss ich nicht
- die erste Klasse noch komplexer machen sondern ich nehme eine zweite in der ich dann möglicherweise nur Fahrräder beschrei da ist vielleicht auch Farbe
- relevant vielleicht auch Preis aber garantiert nicht Kilowatt weil ich gebe ja bei einem Fahrrad idealerweise die Kilowatt in menschlicher Form vor wenn
- ich ein E-Fahrrad habe also ein pedle oder E-Bike ist das aber auch schon wieder kein Fahrrad sondern wieder eine Sonderform da arbeiten wir dann mit
- sogenannten Vererbungen also inheritance inheritance ist ist das
- amerikanische Wort dafür und da kann ich so viele tolle Sachen machen
- die machen wir mal description Funktion finde ich gerade mal ganz geil passt glaube ich gerade ganz gut rein wir gehen wieder in unsere Klasse wir haben
- hier unsere innit das soweit gut da steht do alles drin was wir so brauchen und jetzt machen eine neue Funktion Def description oder weil wir schon Deutsch
- gewesen sind ma was Beschreibung so und die Beschreibung hat nur mein self also nur die Beschreibung von sich selbst nich ander da gehen wir mal aus
- print Klammer auf Klammer zu und das ist mit dem Dings jetzt stört m so Klammer auf und ne ma kein PR ma ganz ganz mit Return gibt return zurück und
- der Return ist ein print formatierten print das het ich ich habe hier die gleichen Dinge die wir
- vorhin auch angesetzt haben self. Name ist oder
- ist also der Name das wäre dann budy ist und jetzt das Alter self.
- Alter Jahre altt Punkt das heißt wir haben weiterhin eine Klasse in der habe ich me Initialisierung die wurd auch abgefragt
- vorhin das haben wir gesehen der brauchte dann einfach diese zwei Parameter und hier würde man wenn man jetzt die Beschreibung verlangt von
- dieser Klasse ein Output bekommen so und das machen wir wie folgt wir nehmen jetzt hier unten wieder unseren bodyd und jetzt hat man
- hier Beschreibung und machen weil wir ja kein Parameter hinzufügen gehen wir das raus und wenn wir das jetzt ausführen
- dann funktioniert's noch nicht weil ich das ganze ja natürlich noch irgendwie pritten muss ne na hier nicht hey das finde ich jetzt drauf so
- das ganze packe ich noch in den Print rein damit es mir auch angezeigt wird hur
- Weg Klammer dazu so in der Hoffnung dass es jetzt funktioniert so buy ist 12 Jahre alt die Informationen sind also dort alle hinterlegt ähnlich wie ich das
- in Listen hatte nur dass ich bei der Liste einfach immer den Index im Kopf behalten musste und das ist mühselig gerade wenn ich dann mit irgendwelchen
- pent oder mit Pops gearbeitet habe ist das schwierig weil so ein Jupiter Notebook klar ich gucke noch mal rein ne was ist da drin in Ordnung aber wenn ich
- dann wirklich vollständig von sich aus losgelöstes Programm schreibe dann gucke ich vielleicht nicht noch mal überall rein sondern ich nehme dann die
- Informationen die dort drin sind und auf die Art und Weise ist es strukturiert ich kann auch weitere Funktionen Belt ich kann ja sagen fahre vorwärts
- fahre rückwärts fahre links fahre rechts das sind alles Funktionen die dann unterschiedliche Dinge triggern und die kann ich in der Klasse oder auch in
- unterschiedlichen Klassen wunderbar miteinander verzahnen ne dann gucken wir noch mal das war die Objektorientierung hier noch
- mal ein bisschen in Vordergrund stellen letztendlich ja komm ich mal Outputs und schieb das euch mal
- rüber ich habe da was vorbereitet würde ich sagen irgendwie hier ist jetzt mal Notebook objektorientierte
- Programmierung ist eine der größten Herausforderung für Beginner wenn sie lernen pyon zu programmieren es gibt viele vielleicht auch zu viele Übungen
- und Lektionen die OP abdecken werden wir uns noch ganz viele angucken aber es ist tatsächlich eher wichtig die Essenz daraus zu verstehen so zusätzliche
- Material gibt's dann dazu und Objekte nutzen vom class Stichwort die Class Attribute die Methoden in Klassen das Lernen von Vererbung und auch spezielle
- Methoden für Klassen das sind alles Dinge die werden wir jetzt sukzessive für diesen Tenor dann kennenlernen ne Methoden hab wir schon mal was von
- gehört es gibt Funktionen Methoden kann man voneinander unterscheiden Vererbung mal mit euch nicht mehr heute also bin sicherlich sehr
- leidenschaftslos aber so wenig lieb habe ich euch nicht dass dann jetzt noch mit Vererbung anfangen ne das Kass Stichwort das ist glaube ich schon mal nicht
- schlecht so wir haben jetzt z.B so eine Liste fühen wir die mal aus mit 1 2 3 dann den Count von ein können wir dementsprechend rausmchen so was wir
- diese Lektion hauptsächlich untersuchen werden ist wie wir ein Objekt wie dieses erstellen können wir haben ja bereits gelernt wie wir Funktionen erstellen
- können und so weiter und so fort so ne hier das ist wenn ich print den Typ von eins den Print von irgendeiner leeren Liste dictionary Tupel etc ausgebe da
- können wir eine ganze Menge machen kennen wir schon was wir noch nicht kennen ist oder was wir dort sehen ist dass alles klassobjek klassenobjekte
- sind wir haben also die ganze Zeit schon mit Klassen gearbeitet ohne überhaupt zu wissen dass es die gibt ne die Programmiersprache hat also quasi eine
- Objektorientierung eingebaut die wir bisank mit so einem grauen Schleier behaftet haben aber nicht reingeguckt unds ist aber immer aufgefallen und ich
- habe es bewusst nicht erklärt als es wir mal häufiger über den Typen gesprochen haben da stand eigentlich immer klasse in G das ist halt von der Klasse von Typ
- Integer und damit war es abgegolen hat doch keiner eine Frage gestellt von euch fand ich schon mal nett ne die Klasse also die vom Nutzer definierten Objekte
- werden durch das Stichwort klasse oder class erstellt class ist eine Blaupause und die Blaupause die Eigenschaften für zusätzliche Objekte festlegt von Klassen
- können wir Instanzen konstruieren eine Instanz ist ein spezielles Objekt das aus einer bestimmten Klasse geschaffen wurde z.B hier Beispiel Objekt dann habe
- ich X ist Beispiel ich kann y ist Beispiel Z ist Beispiel ich kann millionenfache unterschiedliche Beispiele davon machen die sind alle
- unterschiedlich aber alle vom gleichen Typen also wenn ich das jetzt hier ausführe ne kriege ich natürlich hier Klasse Main das ist mein Hauptprogramm
- und das Beispiel Main haben wir vorhin kennengelernt in unserem Beispiel was wir mit dem vcod
- benutzt ja hundmethode und Attribute also self pun Attribut gleich irgendwas die inetfunktion haben wir vorhin ja gemacht also die Klasse Hund mit einer
- innet und einer Rasse hatten wir vorhin ja auch jetzt kann ich Sam ist Hund mit der Rasse Labrador Sam und Frank ist ein Hund Husky das sind alles Hunde die
- stammen aus der gleichen Klasse der Blaupause Hund sind aber völlig unterschiedlich völlig für sich selbst ständig und das kann ich natürlich
- erweitern ich kann mir jetzt ausgeben welche Rasse hat Sam welche Rasse hat Frank gar kein Problem habe ich noch
- mehr Attribute da drin tauchen die auch auf das schöne ist Ben ich hier BU die Beschreibung die Spezies das ist ja alles hier drin ich
- sofort den Zugriff da drauf und auch wenn ich das jetzt mal nicht mit Jupiter Notebook mache habe ich deutlich mehr aber vor allem auch deutlich mehr was
- mich verwirren kann ne underline documentation und so weiter hier irgendwelche inmodule und so weiter und sofort also String Slots das sind ja
- alles Dinge die kennen wir unter normalen Umständen ja gar nicht das heißt die wichtigsten Dinge die werden hier uns auch so dargestellt das heißt
- wir haben das Alter wir haben die Funktion Beschreibung ihr seht das dort schon anhand dieses glötzchens das ist also was anderes als eine ein ein als
- ein reines Attribut da passiert also was drin da wird was gemacht und wir haben den Namen die Spezies und hier oben das Alter das
- ist immer alphabetisch immer wenn ihr euer Jupiter euer ure tulkette hier in englisch installiert habt dann ist es trotzdem
- alphabetisch wenn ihr ist in Japanisch installiert hat das ist immer alphabetisch ne das heißt also auch diese Beschreibung hätte ich die jetzt
- irgendwas mit Z oder sowas genannt dann wäre die hier unten aufgetaucht also unterhalb dieser ganzen komischen underline underline Dinge das kann arg
- verwirren deswegen haben wir relativ spät jetzt erst damit angefangen überhaupt mit einer IDE zu Werken dieser punktoperator gibt mir
- also immer die Möglichkeit und hier schon mit dem Punkt sofort im Jupiter Notbook musste ich den Tabulator benutzen funktioniert aber nach dem
- gleichen Prinzip zeige ich euch noch mal wenn ich also hier ein weitere Zelle hinzufüge und ich sag jetzt hier noch mal
- Sam pun Tabulator kommt Rasse automatisch we das einzige Objekt ist was da drin ist es nimmt uns also viel ab es nimmt die Sachen weg die wir
- vielleicht nicht brauchen die uns verwirren und gibt uns hier nur die Vorschläge die tatsächlich existieren da es nur Rasse in der Klasse gibt ist das
- relativ simpel und einfach das der Unterschied zwischen Notebook also Jupiter Notebook und am Ende der IDE hier Vollzugriff ich sehe sofort
- alles und möglicherweise auch Dinge die ich nicht [Musik] brauche00 si doch ganz gut aus dann
- gucken wir noch mal wie wir weiter vorgehen wir können natürlich auch noch mal ein Klassenobjekt ein Attribut was für alle gilt hinzufügen Säugetier Rasse
- name also habe ich auch hier wieder einen Hund ich habe dem eine Rasse mitgegeben und habe den einen Namen mitgegeben das ist wichtig dass ich die
- Reihenfolge einhalte ne deswegen ganz oft ist es sinnvoll Klassen gar nicht mit so 50 20 wo wir hier war es denn jetzt 1 2 3 4 5 6 7 8 9 10 11 irgendwie
- sowas 10 oder 11 habe ich mich verzählt das sind schon ziemlich viele Dinge wenn ich die in so eine Zeile reinklappen muss dann ist das schon müsig wenn ich
- das aber strukturiert tue weil es eine Blaupause gibt dann wird mir ja immer angezeigt was muss ich als erstes eintragen was muss ich als zweites
- antragen ihr habt das ich versuche mal was ich hoffe mal dass es geht einfach mal hier unten ist egal
- Import cv2 perfekt funktioniert habe jetzt die Bibliothek open CD hinzugefügt haben wir auch Sachen kennengelernt ich wollte z.B
- capture von irgendwas capture GLE oder Image ist GLE cv2 Punkt so jetzt merke ich hier da passiert nichts das kann auch passieren das sind so viele
- Informationen da drin dass ich da plötzlich Probleme habe mir das syntax highlighting darzustellen im read und im Show waren Funktion die konnte ich
- nutzen und manchmal mit etwas Glück wird hier gehlighteht nicht dan aus dass wir Glück haben aber es ist das gleiche Funktionsprinzip wir haben also quasi
- Klassen benutzt ohne zu wissen dass Klassen sind ne von Z vergleichen
- ja das heißt ja das heißt wir nehmen noch einen zweiten Hund wie wollen wir ihn nennen erstm
- Mode die Klasse Schreiben ahag der gleiche Alter
- übergeben dann halt einmal sich selbst und einmal noch ander und einen Hund
- genau gut so mit Klammer auf Klammer zu Mus mal
- gucken kommt ein genau so da möchtest du jetzt Print oder was Turn und dann schauen wir halt wel von
- beiden okay das heißt wir brauchen dann hier ja zwei Variablen drin nämlich einmal undund ein und 1 ist GLE self ne und 2 ist
- gleich dog und dann machen wir genau
- if seht auch ne wenn ich jetzt hier hundinttrage das also normalerweise ist es case sensitive ich habe jetzt mal bewusst ein großes Haar genommen h das
- ist bitte KLE groß nicht klappen genau nein nein ist mir klar aber er schlägt mir jetzt automatisch schon mal Hund 1 in klein vor also da möchte ich nur
- zeigen dass das also durchaus sehr mächtig istigent wir können diese R ein Geschichte weglassen einfach sagen self
- Alter ist größer als alter ja ja lass weg genau if self pun alter kleiner gleich größer gleich oder was auch
- immer gleich Doc Punt Alter ja dann wir
- D ne nicht dann brauchen wir Flo ja also dies FL bedeutet na ja genau machen wir dieses F
- davor dann können wir ja also Klammer geschweifte Klammern das
- ist dann doc. wie haben wir jetzt genannt Alter Alter Alter
- ja sein Namen genau ach ja ja genau
- Name ist älter Alter und dann gehen wir davon aus dass sie nicht gleich
- gut els und Print also genau Print und da gehen wir jetzt wieder von
- F so aus weg damit furchtbar und da möch du jetzt äh self. Name ist älter ja ja
- gucken wir mal was dabei rauskommt das gleicht genau wir müssen noch ein zweiten Hund generieren genau das heißt wir haben
- hier den Hund Buddy wir haben ja jetzt hier ganz viele Sachen könen wir mal wegmachen ne das können wir
- wegmachen ein bisschen schöner Z gestalten da haben wir den buddyhund so wollen wir den zweiten nennen 2 buy 2 ist GLE Doc so jetzt sagt
- er mir schon den Namen keine Ahnung body 2 müssen wir eigentlich nennen und das natürlich als String und
- den geben wir jetzt mal Alter von W was nehmen 12 gut jetzt K wir an Vergleiche body Punkt Vergleich Alter so
- mit dem Doc die 2 so willst es haben
- guck funktioniert genau eine ist mein eigenes und das andere ist der Vergleich mit
- etwas anderem schpiel konstruiert und man merk automatisch glaube ich sehr gut dass die Objekte eben auch gleiche Inhalte haben könnten
- aber eben auch sehr unterschiedlich sein können gehen wiravon aus dass sie unterschiedlich sind das ist der gutfall es gibt aber auch Objekte die gleich
- sind und aus dem guten Grund teilweise haben sie nur eine andere Speicherzelle und sind dementsprechend schon aners ja das ist glaube ich schon eine
- ganz coole Nummer gucken noch malim Notebook noch mal was bisschen mehr haben Sam Spezies Methoden ja z.B hier ein
- Kreis PI = 3,14 einfach als Standard und dann habe ich hier eine Funktion drin init self und der Radius ist von 1 das ist mein
- standardradius der wird einfach angenommen es sei denn ich gib da noch was rein und das kann ich immer so machen das ist mein Standardwerk ich
- kann dann auch sagen ich möchte überschreiben Radius ist z ich einfach an der Stelle andere Zahl rein als ein ich bekomme dann hier mein me self
- Radius ist dann rein dann kann ich jetzt z.B die Fläche den Radius einstellen oder auch den Radius erhalten ich hab mir einfach unterschiedliche Funktion
- mit den ich arbeiten kann wir sprechen dannimmer von Getter und zter Funktion ich setze einen neuen Wert mit einer setfunktion und ich hole mir den
- aktuellen Wert mit einer getfunktion das ist sauber weil ich dann an der Stelle wirklich sage wenn hier jemand eine Variable überschreibt die
- eigentlich einen String war aber jetzt plötzlich eine Zahl ist dann achtung das kann ich in dieser Klassendeklaration also in dieser
- Blaupause dann relativ gut darstellen ne D kann ich sagen C ist gleich mein Kreis das habe ich dann definiert und dann kann ich den Radius einstellen auf Z und
- dann wird dementsprechend etwas ausgegeben ne also kann ich ausführen das ist der Wert den wir hier setzen der ist automatisch dann wird hier das
- ausgegeben was diese Funktion macht Radius erhalten macht einfach nur self. Radius gibt mir also den Wert aus den lese ich hier quasi aus den hänge ich
- hinten dran an den String und bei der Fläche ist es so die Fläche ist Fläche die wird hier berechnet das ist mein selfradius mal mein self Radius mal Pi
- und die habe ich natürlich in meiner Klasse definiert und kann die dann davon nutzen ich könnte auch PI außerhalb der Klasse definieren als eine globale
- Variable bitte S würde auch gehen ja ist dann halt so sauber war weil alle Dinge die meine
- attributvariablen auf globaler Ebene sind sind dann idealerweise mit einem Namen behaftet nur Schi P würde glaube ich
- hier tatsächlich schauen mal das macht genau es haben wir dort festgelegt aber das dann auch übergeben wird also
- 12 5 noch was nein Marker nicht Pi ist nicht definiert weil es außerhalb meiner Definition hier ist außerhalb meiner
- flächendeklaration und dann muss ich kan wir mal gucken ob es mit self geht ich glaube aber auch das wird nicht funktionieren doch das geht dann kann
- ich mit self arbeiten aber nicht ausschließlich weil ich brauche das die Information von meinem Objekt die sind immer gleich weil wenn ich ein zweites
- Objekt generiere hat das auch wieder 3.14 aber ich kann es auch überschreiben wenn ich möchte für jedes individuelle
- Objekt gerade gehabt wenn ich nur P schreibe ja aber in meiner Klasse nicht in meiner Funktion und ich mste das oben
- dann als ah okay da das ist das Public wahrscheinlich genau so und dann habe ich aber invalid
- Syntax weil global P eben dann auch schon wieder wie war das selber mal gucken mit den globalen und nicht globalen
- Sachen global klasse da musste ich was aufpassen
- ja genau ich muss es erst setzen und dann p= 3.14 das ist
- natürlich viel pro viel Arbeit für nix ne aber dann sollte es jetzt eigentlich wieder funktionieren genau ja also ich muss erst eine Variable global setzen
- dann kann ich sie überall benutzen blo ich würde davon abraten die global zu setzen weil es kann ja seini P ist es jetzt unwahrscheinlich aber wenn ich
- andere Variablen als Konstruktor mit in meine attributbeschreibung packe dass ich die vielleicht auch noch mal ändern möchte ne
- m vielleicht kommt irgendwann jemand auf die Idee und sagt P ist halt doch nicht 3,14 sondern 3,11 aber könnte man so gesch private oder SAS
- davorsetzen also private m gibt's in P nicht protect oder irgend ne nur global und nicht global genau und local gibt's auch nicht
- also entweder ist eine Variable lokal oder sie ist eben global ne also noch kein anderen Anwendung na ja in
- Java kann das schon mal vorkommen dass man dort ähm Dinge eben versucht eben auch zu schützen PI ich ma jetzt hier noch mal Kreis Punt
- PI Punkt zack müsste jetzt auch wieder funktionieren genau D das Beispiel
- herstellen also letztendlich das könnt ihr Mirer beantworten ob das verständlich ist ne ob das irgendwo eingängig ist wir werden
- das ja nächste Woche noch mal ganz intensiv machen mit eigenen Beispielen aber das sind so die absoluten Basics wie ich mit Objektorientierung arbeiten
- kann dann wird's noch mit Vererbung lustig und mit me Vererbung noch viel lustiger aber das Funktionsprinzip bleibt immer gleich denkt immer mal
- zurück mit unserer Inception die wir mit unserer Liste hatten wir haben eine Liste kennengelernt und plötzlich haben wir eine Liste in der Liste gehabt
- plötzlich haben wir gemerkt das ist eine Matrix es ist hier auch wenn ich eine Vererbung habe habe ich eben eine Klasse die von einer anderen Klasse erbt die
- Grundinformation und damit muss ich nicht 1000 neue Information eintragen sondern kann die Dinge eintragen die anders sind also die Unterscheidungen
- hervorheben und das macht es von der Strukturierung deutlich angenehmer wenn ich von generischen Dingen in feingranulare Dinge gehe
- z.B die Spezies Tier dann gibt's Tiere das ist wild dazu gehört re brthirsch und so weiter Wildschwein dann gibt's die Gattung Hund
- dazu gehören Labradore Huskys etc da gibt's dann Katzen dazu gehört keine Ahnung mainon scottisch fold oder wie die
- Katzen alle heißen dann gibt's noch Vögel Aras da gibt's n und auf die Art und Weise kann ich ganz speziell für die Vögel eine eigene Blaupause machen die
- aber von der ursprünglichen die Zusatzinformation n die einfach Spezies möglicherweise haben oder irgendwelche anderen Information also das gucken wir
- uns dann an nächste Woche und da wir viel geleistet heute ist schon dunkel draußen reicht dann auch glaube ich hin weil mir war jetzt erstmal wichtig dass
- ihr das verstanden habt dass ihr das mit der Objektorientierung jetzt so als Bonus für heute mitnimmt dass das schon mal
- sacken lassen könnt werden auch noch bisschen Hausaufgaben und sowas war alles nächste Woche für Objektorientierung diese Woche nicht für
- Objektorientierung werden wir nächste Woche dann Hausaufgabe machen aber erst wenn wir das wirklich auch mit Vererbung etc durchgezogen haben wichtig für heute
- ist einfach wir haben mal was programmiert in einer anderen Umgebung die haben wir jetzt kennengelernt und es hindert uns jetzt eigentlich auch nichts
- da dran da drin weiterzumachen eure eigenen Programme zu schreiben ihr müsst dann also auch euure Programme für digitch also für die Projekte könnt ihr
- auch da drin schreiben und wenn ihr dann open CV benutzt dann macht open CV window und dann wird das Window genauso geöffnet wie wir das in Jupiter Notebook
- haten also gar kein Problem das ist wie es die Erwachsenen tun ne also will man wirklich am Ende richtig programmieren dann wird man an so einer IDE nicht
- vorbeikommen aber die ist natürlich auch mein Vielfaches leistungsstärker als das wir im Notebook haben Notebook ist schön für education ich kann Dokumentation
- Code und Ausgabe miteinander kombiniert euch zur Verfügung stellen das hier ist eben hacking da muss ich jetzt anfangen
- wirklich selbständig Programme zu gestalten da könnt ihr ein bisschen ausprobieren also es hindert euch niemand da dran auch nach dieser
- Veranstaltung oder kurz vorher kurz nachher noch eigenständig Erfahrung zuammeln und das ist immer wertvoll denn der Programmier Sprache ist wie auf eine
- lebendige Sprache ich kann Englisch lernen ich kann einen Fach belegen das heißt englische fortgeschritten ich kann da eine Note bekommen und dann bin ich
- plötzlich in England und Krieg kein Wort raus und verstehe nicht was der sagt weil der ein bisschen nuschelt oder der versteht mich nicht weil ich vor Angst
- anfange zu nuscheln ich muss also Dinge tun ich muss dahin fliegen ich muss es dort vor Ort machen ne schwimmen das gleiche ich kann natürlich mich hier auf
- den Tisch legen und kann die Bewegungen beim schwimmen nachhaben oh toll aber das ist dann noch mal ein ganz anderes Gefühl wenn ich das im zwiol mache und
- möglicherweise ertrinken kann ne also machen wirklich machen und eure eigenen Erkenntnisse und Ergebnisse dann einfach auch mal gegenüberstellen und gucken wie
- es läuft also gerade den Projekten ist pyon glaube ich eine ganz gute gesetzte Größe mit der man loslegen kann ne dem Sinne vielen vielen Dank fürs
- Einschalten mitmachen und gestalten das hat mir heute mal wieder richtig Freude gemacht hat richtig Spaß gemacht auch dass er Dach mit eigen
- Ding dann um die Ecke kamt ich werde euch das alles hochladen was welche gemacht haben dann könnt ihr das im Nachgang noch mal nachvollziehen in dem
- Sinne viel Spaß und ich bin dann raus tschüss
Zum Nachlesen
Parallele ProgrammierungEs umfasst zum einen Methoden, ein Computerprogramm in einzelne Teilstücke aufzuteilen, die nebenläufig ausgeführt werden können, zum anderen Methoden, …
MultithreadingMultithreading (englisch wörtlich für Mehrfädigkeit oder auch Mehrsträngigkeit und, weiter übertragen, die Nebenläufigkeit) bezeichnet in der Informatik das …
Python (Programmiersprache)Python ([ˈpʰaɪθn̩], [ ˈpʰaɪθɑn], auf Deutsch auch [ ˈpʰyːtɔn]) ist eine universell nutzbare, üblicherweise interpretierte, höhere Programmiersprache.
Prozess (Informatik)Ein Prozess ist die Ablaufumgebung für ein Programm auf einem Rechnersystem sowie der darin eingebettete Binärcode des Programmes während der Ausführung. Ein …