Zum Inhalt springen
L

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

Rocket Science3:07:46 240 Aufrufe veröffentlicht Auf YouTube

Das Wichtigste aus dem Video

Tipp auf eine Zeit – das Video springt genau dorthin.

Transkriptautomatisch erstellt · 970 Zeilen
Herunterladen
  1. [Musik] [Applaus] [Musik] [Applaus]
  2. [Musik] [Applaus] [Musik] [Applaus]
  3. [Musik] [Applaus] [Musik] [Applaus]
  4. [Musik] [Applaus] [Musik]
  5. [Musik] [Musik]
  6. [Musik] [Musik]
  7. [Musik] [Musik]
  8. [Musik] [Musik]
  9. [Musik] [Musik]
  10. [Musik] [Musik]
  11. [Musik] so hallo und herzlich Willkommen es jetzt
  12. ich wieder oder die Woche ist wieder vorbei wir haben wieder Mittwoch Bergfest und wollen uns heute dann im Nachmittagsbereich wieder um die
  13. wunderschöne Programmiersprache Python kümmern ich habe heute ein bisschen was interaktives mitgebracht das heißt wir werden uns heute mal mit Dingen
  14. 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
  15. 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
  16. 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
  17. bevor wir damit losstarten tatsächlich noch mal kurz an meinen Rechner zurück und euch zeigen wie man das installiert denn das ist
  18. tatsächlich ziemlich einfach ihr habt in eurem Anaconda Navigator unten schon Visual Studio Code auswählbar und da drunter steht letztendlich install das
  19. 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
  20. aber noch ein kleines Weilchen ich werde also jetzt mich nach da unten bewegen und euch dann zeigen wie ihr diese Sachen
  21. installiert solltet ihr den anderen Screen hier sch wo ist er
  22. da so sollte Ihr schon installiert haben soll ja Leute geben die das schon benutzen dann achtet einfach nur daruf
  23. dass wenn ihr ein neues Dokument erstellt üblicherweise ein Python Programm das hier unten auf Python ausgewählt ist in meinem Fall ist das
  24. 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
  25. 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
  26. dem Rechner gefundenen Python Versionen also data science dann hier Base und diverse andere auch hier Installationen die tatsächlich direkt installiert sind
  27. 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
  28. toolketten hier auf dann könnt ihr entsprechend diese auswählen 3.764 bit data science Cona ist das was
  29. 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
  30. 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
  31. andere Dinge dann funktionstüchtig W so Anaconda Navigator mal auf richall ja ja wir installieren das jetzt oder sie installieren das weil ich
  32. 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
  33. dann eben immer auch mal meine toolkette sie haben da die Basis toolkette das ist ja auch unerheblich und wenn sie dann runter
  34. scrollen steht hier Visual Studio Code bei mir schon ein laounge bei Ihnen ein install das installieren
  35. [Musik] starten gucken wir mal ansonsten gehen sie nämlich simplerweise na wo ist jetzt mein
  36. richtiger Cursor hier Visual Studio Code ansonsten gehen Sie ganz einfach und simpel
  37. 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
  38. schon Windows und Linux ist auch vorhanden und dann können Sie sich auch Studio Code
  39. herunterladen das ist reine Geschmackssache eine solche IDE zu wählen git gie gibt so viele unsed Programmierumgebungen mit denen man
  40. arbeiten kann ich persönlich arbeite sehr gerne mit Visual Studio Code obwohl das natürlich von Microsoft ist und ich ja
  41. 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
  42. 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
  43. installiert dementsprechend die Pakete die notwendig sind um dort ein syntax highlighting oder auch das Anstoßen des Compilers anzuen das also wirklich eine
  44. ganz ganz saubere Nummer das sollten wir jetzt erstmal alle insgesamt installieren also entweder ich gucke noch mal dass wir das hier jawohl
  45. entweder sollte sich hier in ihrem Anaconda Navigator dementsprechend Visual Studio Code befinden haben wir gerade schon rausgefunden das ist nicht
  46. 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
  47. 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
  48. 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
  49. 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
  50. auch wenn ich mich da jetzt wiederhole ich halt es für wichtig sollte das installiert haben geht hier oben links mal auf die
  51. 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
  52. 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
  53. 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
  54. 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
  55. HTML Java JavaScript julia ist auch eine Programmiersprache lwm ist ein Compiler Lua Markdown Markdown haben wir schon
  56. 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
  57. User ganz interessant möglicherweise ich habe schon mit Powershell gearbeitet ich find es jetzt nicht so super cool aber um mal
  58. 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
  59. den wortmitteln die MIC t anbietet als dann mit einer nachträglich installierten Programmiersprache wie z.B Python die taucht hier unten auf wenn
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. ich z.B totencode in meinem Script oder in meinem Code vorhanden habe der eingelesen wird aber nie benutzt oder auch Variablen die
  67. 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
  68. 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
  69. oder hier haben wir theoretisch Zugriff auf Betriebssystem und könnten möglicherweise in fremden Speicher rumwühlen was dann zum Absturz
  70. vielleicht dann nicht nur von dem jeweiligen Programm sondern vielleicht von der gesamten Instanz oder dem Betriebssystem führen kann ne also wir
  71. entwickeln uns jetzt in profirichtung weiter dann ist das bei euch soweit schon installiert
  72. jetzt ja hier vorne ist es hier wird genickt bei dir ist das sowieso schon alles muss ich
  73. 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
  74. dass das generell funktioniert so wir starten bitte ich kann nicht ändern auch wenn Sie hier unten klicken können Sie das
  75. nicht dann machen sie mal ein folgenden Trick pass mal auf antittitelt haben wir es ja
  76. hier sie machen mal Steuerung S und dann soll es ja gespeichert werden und dann nennen sie das jetzt mal hallo.
  77. 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
  78. 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
  79. gemeinsam print ein aber mal langsam wenn ich hier P eintrage dann taucht hier plötzlich ganz viel magisches auf inklusive Dokumentation wir erkennen
  80. noch unsere helpfunktion im Jupiter Notebook die wir ein paar mal benutzt hatten die ist hier inline drin inklusive syntax highlighting das heißt
  81. die einzelnen syntaxelemente werden unterschiedlich dargestellt wir kennen das von Def das wurde grün und dick dargestellt also in bal
  82. 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
  83. 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
  84. 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
  85. 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
  86. Ausrufezeichen tolles Programm das schönste Programm das man sich vorstellen kann und ob das jetzt alles funktioniert also ob hier unten eben
  87. 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
  88. 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
  89. hier oben ein unscheinbares play Symbol das hier sollte ich mal wegmachen das gehört hier nicht in den Screens schs mal hierhin so
  90. 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
  91. 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
  92. Jupiter Notebook kennen denn Users fpramme opt pyon also Anaconda 3 environments data science bin Python und dann irgendwie den Code und dann den
  93. 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
  94. 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
  95. weiterhin gehen kann denn die Begrifflichkeiten bis auf Klassen also Objektorientierung können wir jetzt schon alles das heißt wir können Skripte
  96. schreiben wir können sogar Programme schreiben die nicht unbedingt ein skriptcharakter haben also die nicht zwangsläufig oben anfangen müssen und
  97. unten aufhören müssen habt ihr schon malwohl ne das frage ich nicht dann machen wir jetzt einfach mal ein
  98. Tafelbild wer ich auch mit euch zusammen hier ist irgendwie sowas komisches das will ich hier nicht das ist
  99. anlast ma wir das mal hoch dass ihr das schön sehen könnt perfekt bislang haben wir ein Programm
  100. ausgeführt das ist meine Zeit mein Programm startet hier endet hier das ist
  101. 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
  102. 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
  103. Import drin ich habe irgendwelche Variablen Zuweisungen drin ich habe irgendwelche Prozesse drin unter anderem ja auch schleifen die haben wir
  104. kennengelernt und in so einer Schleife kann es ja sein dass mein Programm letztlich einfach wieder von vorne anfängt eine endlos Schleife haben
  105. 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
  106. Programm wieder durchgelaufen hat wieder seine Bedingungen überprüft und wir hatten eigentlich immer einen wiederkehrenden Startpunkt in diesen
  107. 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
  108. geben ist ja nur exemplarisch so und jetzt programmiere ich üblicherweise ja sequentiell das heißt mein Programm
  109. ein und danach startet vielleicht ein bisschen kleiner mein Programm 2 nacheinander Programm 3 Programm 4
  110. Programm 5 Programm 6 nacheinander das dauert lange bis ich dann einmal durch bin mit meinen sechs Programm und wieder zum Anfang
  111. durchgehen kann eben x lange Zeit vergangen sein jetzt kann ich das natürlich wir sind ja Programmierer und vor allem Informatiker
  112. damit anfangen dass mein Programm 1 hier startet bei Null und ein bisschen verzögert nur ein bisschen verzögert
  113. mein Programm 2 hier schon startet so das ist 1 2 3 machen wir ganz ehrlich dann ist es
  114. eben auch genauso lang wie das Programm was wir da oben hatten so beim ersten Fall hatte ich 9 10 11
  115. 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
  116. Unterschied inander laufen ja genau also wenn ich Dinge miteinander verzahne oder sogar parallelisiere kann ich in derselben
  117. Zeit mehr erledigen das ist das eigentliche Grundprinzip man muss da auch gar nicht jetzt irgendwelche großartigen
  118. 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
  119. 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
  120. 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
  121. 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
  122. 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
  123. über einen Scheduler verfügt also ein ein System das Priorisierungen an unterschiedliche Tasks also programmabschnitte oder Unterprogramme
  124. verteilt und dementsprechend versucht möglichst viel zu parallelisieren ansonsten muss ja immer in einen gewissen Systemabschnitt
  125. ü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
  126. wahrscheinlich nur pikoskunden aber dieser Überprüfung muss dann immer wieder passieren immer wieder passieren immer wieder passieren und sorgt
  127. letztendlich für Verzögerungen wenn ich von der kontinuierlichen Welt in eine ereignisorientierte Welt wechseln kann indem ich so lange irgendwas anderes
  128. 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
  129. und nichts mache etwas tun ganz blöd ist es wenn wir unseren Prozessor nicht zu 100% auslasten das
  130. klingt immer ein bisschen mit soem Nachgeschmack man möchte ja eigentlich wenn man in der Taskleiste so guckt nie sehen dass die
  131. 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
  132. 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
  133. 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
  134. 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
  135. 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
  136. 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
  137. hier oder so ja perfekt jetzt erstmal so ein bisschen akklimatisieren Pupillen zusammenziehen
  138. ne jetzt weiß man den das ist der Drogentest ne wenn sich die Pupillen jetzt nicht zusammenziehen dann weiß ich Bescheid spaß beiseite
  139. ä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
  140. Systeme m desto mehr ich an die Hardware Ebene heruntergehe umso wichtiger werden Dinge der Parallelisierung eine Instruktion also
  141. 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
  142. 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
  143. 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
  144. 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
  145. 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
  146. 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
  147. Programm auch in gewisse zeitliche Strukturen zu bewegen wenn ich euch jetzt sage dass man mit einer passenden Hardware diese 1000 Instruktionen ich
  148. 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
  149. 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
  150. 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
  151. das heißt ich habe eine Beschleunigung von Faktor 1000 in meiner Ausführungszeit das ist keine Seltenheit das ist so ein bisschen der
  152. Unterschied ganz oben Schicht 7 im ISO OSI Referenzmodell das ist so die Anwendungsschicht da sind eigentlich alle softwareingenerer so ein bisschen
  153. 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
  154. natürlich auch nur bis zu einer physischen end Schwelle aber dort kann man tatsächlich Magie anwenden wie das
  155. funktioniert und zusammenhängt das möchte ich heute mit euch mal kurz gemeinschaftlich programmieren wir werden also gleich ein Programm
  156. schreiben eigentlich werden wir vier Programme schreiben wir werden ein Programm schreiben das über keine nonconcurrency also keine
  157. Nebenläufigkeit keine Parallelisierung verfügt mit ganz klassischen wortmitteln und dann werden wir das sukzessive ergänzen erweitern verändern wenn man so
  158. 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
  159. Möglichkeiten vielleicht auch hinsichtlich asynchroner Programmierung erweitern wir werden immer das gleiche Beispiel haben wir werden immer das
  160. Gleiche tun wir werden am Ende aber merken dass es unterschiedlich lange dauert und Effizienz und vor allem auch effizientes programmieren ist etwas was
  161. man in der Java Entwicklung und meistens auch in der Python Entwicklung nicht so beigebracht bekommt aber wenn ihr in digitalisierungsprojekten Hardware nutzt
  162. 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
  163. 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
  164. 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
  165. wir setzen uns jetzt einfach wieder an unser Programm und werden gemeinsam wirklich gemeinsam dieses jetzt mal erleben das heißt wir programmieren ein
  166. 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
  167. mir mal ein bisschen Desktop auf weil die Webseite die brauchen wir jetzt hier nicht mehr die kann ich also mal munter wegmachen
  168. 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
  169. 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
  170. 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
  171. 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
  172. werden wir vier unterschiedliche Programme haben die eigentlich die gleichen Anforderung besitzen und auch das gleiche tun nur halt unterschiedlich
  173. schnell so ich brauche dafür zwei imports jetzt fangen wir mal an
  174. Import und dann gibt es requests müsst i mal gucken ob ihr das habt und Import time auch mal gucken ob das euch
  175. vorgeschlagen wird bei mir ist es auf jeden Fall da so das ist erstmal der Beginn unseres Programms meine
  176. mainfunktion die ich konsequent nicht brauche wenn ich Jupiter Notebook verwende die ich aber dringendst brauche wenn ich aus Jupiter Notebook also in
  177. 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
  178. underline Name underline underline also wenn mein Programm einen Namen aufweist der gleich gleich iten under under Name ist gleich gleich
  179. 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
  180. 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
  181. 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
  182. ich auch schon sofort die geschlossene Klammer wie ein Jupiter Notebook erwarten und jetzt ma ich hier meinen ersten String rein das ist
  183. https del/ash
  184. 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
  185. https doppel. double/ www. was soll wir nehmen Youtube
  186. 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
  187. 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
  188. 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
  189. 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
  190. 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
  191. Webseiten Aufrufe und wir wollen das ja überprüfen wie lange das dauert also gehen wir die nächste Zeile Code
  192. auch noch in unserer mainfunktion und definieren uns mal eine Startzeit start time
  193. time ich gucke mal kann ich das für euch nicht sogar noch ein bisschen dicker machen plus hier nee aber irgendwo unter
  194. [Musik] Ansicht
  195. Fenster Controll plus auch nicht Kommand plus oh das ging ein bisschen größer okay dann seht ihr das vielleicht noch ein
  196. 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
  197. kommt euch entgegen gerade hier jetzt gut dann brauchen wir eine Startzeit und am Ende e auch irgendwie eine duration also wie lange etwas
  198. gedauert hat beginnen also un Startzeit das ist gleich time Punkt und jetzt können wir hier ja tatsächlich schon ganz viele Sachen
  199. 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
  200. 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
  201. 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
  202. mein Programm startet also meine Startzeit die wird protokolliert und wenn ich dann diese Startzeit quasi noch mal von
  203. 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
  204. noch die Klammern hier hint so dann wollen wir später eine Definition schreiben also eine Funktion die alle Seiten
  205. 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
  206. 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
  207. 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
  208. 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
  209. und was muss ich jetzt davon abziehen oder aufadieren also
  210. 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
  211. Download fertig das ist einfach nur weil das noch nicht es gibt ja noch ein paar Probleme
  212. 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
  213. 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
  214. 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
  215. kleines F dazu packen und da drin wollen wir downloaded jetzt wollen wir ein schweifte Klammer auf und zu und
  216. wollen da drin die Länge unserer sitides also wir wollen wie oft eben etwas gedownloadet ist mit welcher Zahl gerade
  217. ausgeben in und diese geschweiften Klammern sind quasi immer die Platzhalter dafür was ich in dieser bedingten Formatierung
  218. meiner PRF Anweisung darstellen möchte in duration mein Kommentarfeld hier wegmachen
  219. moment mal das auf die linke Seite duration seconds ja ich glaube das sind Sekunden die zurückgegeben werden das
  220. 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
  221. 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
  222. der Vollständigkeit halber damit wir da eine schöne printf Anweisung printanweisung haben so
  223. 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
  224. 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
  225. gerne miteinander verzahne machen wir jetzt zwei Funktionen nämlich einmal das runterladen von einer Seite und einmal das runterladen von allen Seiten die
  226. 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
  227. funktioniert ganz gut so die Definition Def download site da gebe ich ein URL mit und
  228. [Musik] eine Session soweit so gut diese Dinge bekomme ich aus
  229. 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
  230. Session hole ich mir die URL als eine response und da drin gebe ich jetzt ein
  231. print F Print und das ist auch eine formatierte bedingte Formatierung da schreibe ich read jetzt möchte ich wieder die Länge also
  232. l response Content der da drin gespeichert ist Klammer zu Klammer so jawohl from also aus meiner
  233. URL na from und meine bedingte Formatierung der URL was mache ich hier ich hole mir
  234. 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
  235. 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
  236. 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
  237. 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
  238. 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
  239. in requests. eine Session als eine Session Doppelpunkt und für jede URL
  240. in Sites Doppelpunkt mache ich den Download Site mit meiner URL und meiner
  241. Session eigentlich nichts tragisches dieses ganze bunte hier das zeigt uns ja schon dass es einigermaßen gut funktioniert warum wir jetzt hier
  242. in not expected ach so ja gut das ist weil er der Meinung ist er möchte das jetzt irgendwie
  243. 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
  244. 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
  245. einzelne URL also jeden einzelnen Punkt aus meiner Liste Abrufe jetzt gucken wir noch mal das soweit in Ordnung geht das sieht aber
  246. ganz gut aus ich starte das mal so da haben wir jetzt Import ah oh jetzt weiß ich auch was er hat ich
  247. habe hier jetzt passt es das soll ste dementsprechend so
  248. 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
  249. 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
  250. 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
  251. Puff und jetzt kriege ich hier meine Session IDs und Youtube aostfalia Youtube austfalia Youtube a ihr merkt schon immer
  252. 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
  253. mal [Musik] pfeifen darf man im Stream ja nicht das ist ja ein schlechter Ton sorry
  254. 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
  255. 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
  256. Internet wenn ich jetzt ein kabelgebundenes Netzwerk habe bin ich schneller als wees Network ne so was haben wir da jetzt
  257. 160 Webseiten in 46 Sekunden das schreibe ich auf also wir
  258. 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
  259. 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
  260. irgendwelche netten gixs so die gimmiics kommen jetzt jetzt fangen nämlich an dieses Programm als eine neue Datei zu
  261. 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
  262. nenne ich die neue Datei io underline threading PY ganz wichtig immer PY hinten dran das ist für
  263. 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
  264. nehme jetzt mal den kompletten codeung a Steuerung C also kopiere alles und pack ihn hier
  265. 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
  266. unter Programme erstellen lassen vom Betriebssystem aus also thres benutzen das ist gar nicht so einfach und gar nicht so kompliziert
  267. 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
  268. ich mach sie mal oben drüber das ist Import Import threading wenn man es richtig schreibt
  269. dann dürfte es auch funktionieren genau Imort
  270. 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
  271. 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
  272. 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
  273. Import con current Punkt und wir wollen davon Futures also die zukünftigen
  274. Funktion die in alten pyon Versionen quasi nicht vorhanden sind und benutzen die so wie sie sind also wenn wir irgendwas mit threading
  275. benutzen müssen wir jetzt dementsprechend threading vorne hinschreiben der Verständlichkeit halber lasse ich das jetzt so natürlich könnte
  276. 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
  277. 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
  278. lokal das heißt ein Thread underline Lokal gleich threading
  279. 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
  280. 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
  281. 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
  282. ein bisschen kleiner wieder das brauchen wir nicht ein bisschen mehr sieht also ma mal eine Funktion Def und das ist
  283. get [Musik] Session und machen dort mal ein if etwas not also wenn nicht has
  284. Attribute in threading local also Thread local und meiner Session also wenn mein wenn dieses Attribute Session darin nicht
  285. 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
  286. 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
  287. 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
  288. einen Thread local pun Session ist gleich requests groß
  289. 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
  290. können wir kopieren einfügen nämlich das ist unser local Session so wir machen also jetzt nichts anderes als
  291. 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
  292. versuchen einfach nur zu gucken dass sich diese kleinen Unterprogramme nicht in die Quere kommen das ist also insgesamt sauber von statten geht dass
  293. 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
  294. 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
  295. 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
  296. 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
  297. 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
  298. so sag mal drei zeilencode die wir geändert haben jetzt machen wir noch eine weitere Änderung die passiert hier unten wir
  299. wollen nämlich jetzt mit diesem concurrent also mit dieser Nebenläufigkeit der Parallelität arbeiten heißt wir gehen hier in die
  300. Funktion download all sites mit concurrent Futures gr t Thread Pool executter und
  301. dort machen wir max worker workers ist es hin na das ist aber jetzt nicht so schön
  302. Max workers GLE 5 sch mal zu Klammer auf Klammer zu eines zu viel genau so wir deklarieren also hier jetzt
  303. ein Pool an parallelen Threads und sagen fünf threats können parallel laufen jeder Thread wird vom Betriebssystem sehr gerne auf einen
  304. 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
  305. 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ß
  306. 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
  307. Prozesse starten ne ähm genau da fehlt der mal jetzt den Curser
  308. ne auch sind wir nicht fertig wir wollen hier das ganze s executter Tor kutor Doppelpunkt dann passt das und da wir jetzt ja
  309. letztendlich schon alles gemacht haben was wir brauchen können wir diesen kompletten Bereich hier unten drunter wen ich mein Cursor wieder finde
  310. ersetzen durch H wieder oben hin wird eingerückt durch unseren Executor den wir verwenden da bauen wir eine Map auf also
  311. eine Karte durch die er sich durchhangeln soll und das sind unsere download seite und unsere Sites ist jetzt maximal schlecht zu
  312. 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
  313. 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
  314. 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
  315. machen und da wir diese executoren Executor hier dann definiert haben machen wir nichts anderes als die jeweils diese jeweiligen Seiten
  316. herunterladen ich guck noch mal ob wir hier unten was ändern müssen aber eigentlich ist durch die die wir dort haben alles gleich
  317. 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
  318. Webseite dann die andere Webseite dann wieder die erste die zweite die erste die zweite jetzt lassen wir das Betriebssystem bisschen Magie in unser
  319. Programm überführen indem wir fünffache Parallelität ansetzen ob am Ende auch der fünffache beschleunigungsfaktor sich
  320. 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
  321. 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
  322. 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
  323. und das sieht schon schneller aus das sieht um ein Vielfaches schneller aus und es ist auch schneller 8 x 5
  324. ist 40 ja cool ne das heißt ich bin sogar noch ein bisschen schneller geworden funktioniert bisschen hoch das Local funktioniert
  325. 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
  326. nur diese dieser Befehl h der ist bei dir aufks
  327. 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
  328. 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
  329. 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
  330. mittels vier zeilencode glaube ich eine mehr als fünffache Beschleunigung das ist jetzt
  331. thres und wir haben irgendwie 8 pun 28 Sekunden das sind jetzt natürlich performancewererte die kommen von meinem
  332. 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
  333. 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
  334. hier aufschreibe be euch sind die natürlich dann unterschiedlich so jetzt können wir das ganze Spielchen noch beschleunigen
  335. multiprocessing ist so die nächste Gangart mit der man sich dort auseinandersetzen kann mach mal die Kamera hier an
  336. wills oder multiprocessing kann ich mein Programm in mehrere kleine unabhängige Abschnitte teilen lassen die dann völlig losgelöst
  337. 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
  338. 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
  339. 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
  340. wie wir das gerade am Anfang auch schon gehabt haben wenn ich jetzt eine Möglichkeit habe mittels multiprocessing unterschiedliche kleine
  341. 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
  342. beschleunigen wir werden also W wir das gleich mit multiprocessing Programmieren merken dass wir dann vielleicht zwei oder dreimal aostfalia.de hintereinander
  343. wegladen und dann irgendwie einmal Youtube oder zweimal Youtube oder in unterschiedlichsten Reihenfolgen und wenn ich das dann mehrfach ausführe
  344. kriege ich auch immer unterschiedliche Outputs die Zeit wird etwa gleich sein zumindest ähnlich weil wir kommunizieren ja mit Serversystem und das in Echtzeit
  345. 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
  346. das gleiche hintereinander gemacht wurde bei Youtube auch aber eben wir wollen das jetzt mal auf die Spitze treiben das ist Prinzip eine Art
  347. 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
  348. 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
  349. nehmen wieder eine neue Datei so und speichern die das ist jetzt io underline
  350. multiprocessing processing PY immer auf acht geben PY und dann habt ihr automatisch auch hier die Umgebung dass es als ein Python
  351. 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
  352. 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
  353. 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
  354. 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
  355. 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
  356. möchte jetzt mich hier mit dem multiprocessing beschäftigen also gehen wir wieder in
  357. unseren Bereich hinein nein lass es mal von der von der ursprünglichen Form kopieren damit wir sehen was der Unterschied denn auch im
  358. 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
  359. 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
  360. verzahnen so das heißt in unserem Beispiel für das multiprocessing müssen wir ja eigentlich nur einen Import hinzuführen
  361. 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
  362. 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
  363. 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
  364. nehmen unsere Definition Set global Session also die ist jetzt wirklich
  365. global weil wir mehrere kleine Unterprogramme jetzt erstellen lassen und in dieser machen wir uns die Variable zu nutzen die wir oben schon
  366. deklariert haben als eine globale Variable so dann if not Session also wenn dieses tatsächlich
  367. irgendwo nichts beherbergt also eine Null beherbergt dann erzeugen wir eine neue Session und die ist mit unseren
  368. 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
  369. eine globalen Counter bekomme eine globale Übersicht über die vielen kleinen Elemente die ich da drunter liegend ansetze so mein download site
  370. 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
  371. get URL und Response das sieht ganz gut aus der Print sieht auch ganz gut aus aber wir sollten vielleicht hier noch mal eine
  372. Kleinigkeit hinzufügen die besagt dass wir dort auch den Namen weil ich habe ja jetzt
  373. 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
  374. respon hinein und sagen Name ist gleich das ist eben ein multiprocessing current Prozess und davon wollen wir den Namen gerne haben
  375. 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
  376. Klammern rein und sagen das ist jetzt hier mein Name Doppelpunkt read dazu dann sieht das auch schick aus und das ist mein
  377. 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
  378. weggemacht das heißt das können wir hierand neu schreiben with auch wieder
  379. multiprocessing in dem Fall ein Pool an Elementen mit einem initializer also einem
  380. initialisierer der aus unserer Set global Session herauskommt und das ganze machen wir als ein Pool also s Pool Doppelpunkt und das
  381. 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
  382. Sites und die Sites an sich so jetzt mal gucken na wo ist mein Cursor da das sind zwei zahencode das
  383. 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
  384. Ä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
  385. 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
  386. 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
  387. 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
  388. 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
  389. programmieren dann kommt hier ein Request optional missing required downlo seit mal gucken das ist die
  390. Zeile Downloadzeit get Session current process Name
  391. Session das haben Wiro ist mein Cursor missing one
  392. 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
  393. diese global bekommen wir ja das das heißt da müssen wir kein übergabewert haben und das heißt eigentlich auch dass wir
  394. das [Musik] dann an der Stelle auch nicht mehr brauchen ja genau das sollte jetzt
  395. 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
  396. was passiert bum 3,2 5 wenn wir ehrlich sind ne also da ist noch mal was drin
  397. gewesen das ist jetzt so
  398. 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
  399. 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
  400. her kennen konnten wir eine ein Programm schreiben dass immer mal wieder eine Webseite aufruft und das nacheinander tut 160
  401. 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
  402. 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
  403. 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
  404. 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
  405. achtfache das ist schon enormer Unterschied und wenn ihr später in euren Projekten eben auch auf einer Hardware die multiprocessing oder threading
  406. 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
  407. 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
  408. 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
  409. 57 Sekunden warten das wäre blöd hier haben wir ein mehrstufiges System geschaffen wie gesagt erstmal angefangen mit wie funktioniert die Dampfmaschine
  410. was sind so die rahbedingungen mit denen man arbeitet und gleichermaßen haben wir auch eine weitere Entwicklungsumgebung kennengelernt und ich denke mal ihr
  411. 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
  412. einer Wordpad Datei arbeiten bitte gol ja dann dann ist pcharm jetzt doof nein also
  413. alles hat so irgendwo seine Daseinsberechtigung früher habe ich sehr gerne mit Eclipse gearbeitet es wird
  414. 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
  415. 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
  416. 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
  417. 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
  418. ähnlich wie Wikipedia ja aufgebaut ist dann nutze ich latech ganz oft um vor allem auch Dokumente zu erzeugen die
  419. 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++
  420. 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
  421. 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
  422. 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
  423. 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
  424. 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
  425. Angebot das ist quasi eine Beschreibungssprache für Hardware um FPGAs und ASIC zu programmieren ne wenn ich da was
  426. 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
  427. 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
  428. 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
  429. 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
  430. deutlich früher als ja die regulären Nutzer dann auch etwas was ich persönlich sehr cool finde was ich integrieren kann in
  431. 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
  432. ü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
  433. 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
  434. zu müssen das nutze ich ganz gerne bei Abschlussarbeiten wenn ich die betreue und ein Proband
  435. 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
  436. 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
  437. 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
  438. 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
  439. 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
  440. ich bin ja farbenblind wenn man da noch mal reingucken hier setze ich mich dann sicher das im
  441. 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
  442. hier unsere Bibliotheken also erstmal der Import mit irgendwie einem rot das seht ihr gar nicht den Import mit den Request das ist
  443. 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
  444. 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
  445. 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
  446. 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
  447. passiert nichts ihr könnt über die bitte das weiß ich gar nicht stimmt bei einer Funktion eben auch hier wird euch
  448. 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
  449. 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
  450. 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
  451. 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
  452. 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
  453. geht gibt aber ach so okay ja also da muss man sich halt ein
  454. bisschen mit auseinandersetzen wie gesagt es ist eine Möglichkeit es gibt pycharm es gibt Spider Spider wird in Anaconda sogar mitgeliefert
  455. ähm die ist sehr für Schulungszwecken also da ist dann auch so eine Sache wenn ich Variablen deklariere kann ich mir dann angucken
  456. welcher Zustand die Variable hat zu welchem Zeitpunkt das schon fast Debugging das kann ich mit hil helferlias die ich
  457. hier hinzufüge genauso realisieren ich kann sogar nicht mit dieser Version nur mit der Inside Version Jupiter Notebooks öffnen in Visual Studio Code
  458. 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
  459. her absolut identisch einzige Vorteil der den ich sehe in der Nutzung von Visual Studio Code mit
  460. 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
  461. 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
  462. gedauert hat dann ist es vielleicht interessant zu wissen dass das jetzt 6 Sekunden
  463. gedauer so dann gucke ich mal ob ich euch noch mal was anderes zeigen kann
  464. 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
  465. 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
  466. deswegen ne machen wir das jetzt nicht gemeinsam wir gucken uns quasi n das Endergebnis an hier hat sich nichts geändert das
  467. 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
  468. 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
  469. 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
  470. 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
  471. ins Detail gehen aber m read non genau S 4 Sekunden ein bisschen drüber aber ihr merkt schon
  472. hier wird etwas heruntergeladen ne Apple Apple Apple und [Musik]
  473. 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
  474. ich habe Apple genommen anstatt Youtube das ist mein Musterlösung sozusagen die wir jetzt hier betrachtensonst ist
  475. 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
  476. hier über LS auch angeben was sind hier für irgendwelche list dictionaries mkd für make dictionaries also die ganzen Unix
  477. Befehle um auf der Kommandozeile irgendwas zu machen die funktionieren hier unten halt auch jetzt ma ich mal 200 Webseiten und fre das
  478. aus was dann passiert wahscheinlich bin ich deutlich unter den 46 Sekunden 8 Sekunden 400 Webseiten
  479. parallel quasi analysiert das ist das was Google macht asynchron auf Serverfarm die hen sich alle Webseiten runter laden die
  480. irgendwo analysieren die im späteren und das eben in Sekundenbruchteilen wie Google angefangen hat waren ja Rechner graue
  481. Büchsen man hat eine Webseite besucht sich den Inhalt runtergeladen den gescramblelt und dann irgendwelche Parameter gesetzt sagt okay das ist eine
  482. 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
  483. 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
  484. 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
  485. das natürlich auch ins Ranking integriert so da wir aber ändern was bitte noch mal in Youtube damit vom gleichen sprechen ich
  486. 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
  487. auflösen Buff das kennt er nicht und jetzt noch mal jetzt funktioniert das
  488. 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
  489. Netzwerk aber wir können eben in 8 Sekunden locker das doppelte an Webseiten abrufen als wir mit unserer
  490. 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
  491. 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
  492. ne ja man darf ja nicht vergessen h läuft nebenbei Screen Stream ne also das ist schon Scheller ja
  493. 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
  494. 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
  495. 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
  496. 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
  497. 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
  498. Anforderung bekommen ich habe euch natürlich jetzt dort gezeigt wie es funktioniert aber wenn ihr diese Anforderung bekommen hättet hättet ihr
  499. irgendwas programmiert und hättet wahrscheinlich einfach vielleicht die erste Lösung vielleicht die zweite Lösung oder was auch immer etabliert
  500. jetzt haben wir hier vier Lösungen und der Kunde kann entscheiden welche er haben möchte hat eure Maschine Multicore also
  501. hat die mehrere Prozessoren ja dann ist vielleicht Trading schon nicht schlecht hat eure Maschine wirklich auch viele Cores die auch gehyperthreatted werden
  502. 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
  503. 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
  504. 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
  505. 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
  506. das eben nur 30 mal die Sekunde weil meine Bildauflösung 30 Mal in der Sekunde auflöst ich könnte das einmal mit
  507. bildverarbeitenden Prozesse machen einmal mit ml und dann analysieren inwi weit diese Dinge sich möglicherweise auch noch zusätzlich beschleunigen
  508. 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
  509. 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
  510. 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
  511. sehr hoher Wahrscheinlichkeit sagen dass das korrekt ist wenn aber in einem Bild eine erkannt wurde im darauffolgenden Bild wieder keine im daraufolgenden Bild
  512. 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
  513. riesen Hexenwerk ne also was ich brauche ist eben dieses hier und dieses concurrent ja das ist einfach nur dass ich die
  514. 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
  515. verbaut der nicht über mindestens ein du corore verfügt und alles über DuoCore funktioniert mit den concurrent eigentlich relativ gut kann ich also
  516. 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
  517. 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
  518. mal clear dann probieren wir das auch noch mal aus vielleicht habe ich in Effekt vielleicht nicht denn diese Zahl
  519. 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
  520. 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
  521. 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
  522. schneller wird so es wird zwei noch schneller so machen wir mal verdoppeln was auf
  523. 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
  524. Threads länger dauert als der Vorteil zu parallelisieren0 was wie sieht mit0 aus probier mal aus jetzt hat er eventuell
  525. das Problem gehabt dass er hat als ja aber das sind so Dinge das ist jetzt
  526. 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
  527. 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
  528. 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
  529. 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
  530. 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
  531. 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
  532. 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
  533. 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
  534. 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
  535. 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
  536. 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
  537. 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
  538. möglicherweise wenn ihr nur Webseiten runterladen sollt dann fehlt ja diese time duration intereration dazwischen vollständig also ihr lest es nicht aus
  539. 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
  540. Pause machen das wird ja wichtig ne ich merke schon in der Informatik gibt's halt unterschiedliche Metriken eine Metrik
  541. ist die Beschleunigung oder die Geschwindigkeit von meinem Programm dann kann die Beschleunigung natürlich auch nicht weit her sein denn wenn ich weiß
  542. wie schnell mein Programm ist dann kann ich zwei unterschiedliche Varianten überprüfen und eine davon ist immer schneller als
  543. die andere manchmal ist es so dass man schon bei den Datentypen merkt dass man es igen kann wenn ich ein Integer nehme
  544. 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ß
  545. 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
  546. 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
  547. Speicherbedarf ich bin also ergo wenn ich das sukzessive mache auch schneller dann Performance Parameter die haben wir jetzt gerade kennengelernt dann gibt's
  548. 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
  549. unterschiedliche transistorfelder das ein bisschen Speicher da ist eine Grafikkarte drauf und so weiter und so fort und mit mittlerweile sind wir bei 5
  550. 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
  551. 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
  552. 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
  553. 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
  554. ist ähnlich heißt da gibt's Varianten natürlich aber man könnte jetzt natürlich mal messen also Notebook an
  555. Messgerät anschließen um zu schauen wie viel Watt hat meine Lösung denn jetzt verbraucht ist die am Ende eben vielleicht
  556. 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
  557. 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
  558. 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
  559. 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
  560. 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
  561. 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
  562. 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
  563. 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
  564. 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
  565. vielleicht über einen Akkusystem also eine Powerbank betrieben wird und das eben nicht den ganzen Tag kann weil er irgendwann die Powerbank leer gelutscht
  566. hat ne und in dem Sinne machen wir jetzt erstmal eine Pause ne [Musik]
  567. [Musik] also
  568. [Musik] [Applaus] [Musik] [Applaus]
  569. [Musik] [Applaus] [Musik] [Applaus]
  570. [Musik] [Applaus] [Musik]
  571. [Musik] [Musik]
  572. [Musik] [Musik]
  573. [Musik] [Musik]
  574. [Musik] [Musik]
  575. [Musik] [Musik] [Applaus]
  576. [Musik] [Applaus] [Musik] [Applaus]
  577. [Musik] [Applaus] [Musik] [Applaus]
  578. [Musik] [Musik]
  579. [Musik] [Musik]
  580. [Musik] [Applaus] [Musik]
  581. so dann wir ja fast bis 17:30 jetzt durchziehen spaß beiseite
  582. m Objektorientierung ist das letzte was uns noch fehlt Objektorientierung und eine ganze Menge
  583. Spaß mit und ohne Objektorientierung aber letztendlich ich kann euch von der Syntax nicht mehr viel beibringen das
  584. ist jetzt vorhanden ich kann euch von der Semantik noch so ein paar Kniffe zeigen wie z.B das was wir gerade gesehen hatten
  585. 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
  586. Programmiersprache bei Amazon einträgt dann kriegt man 500 Millionen unterschiedliche Bücher und da steht dann Python in 21 Tagen oder Python der
  587. 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
  588. 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
  589. 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
  590. der Programmierung genauso haben wir auch gesehen ne nach besten Wissen und Gewissen alles irgendwo niedergeschrieben und dann irgendwo noch
  591. mal eine Zeile verrutscht oder dies oder das oder jenes das passiert dem besten bloß zu erwarten dass ich in einer grundlagenveranstaltung im ersten
  592. 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
  593. bisschen versuchen voneinander zu differenzieren da müsst ihr euch selber Programme einfallen lassen ausprobieren deswegen ist die
  594. Digitalisierungsprojekte auch gar nicht so schlecht ihr müsst jetzt mal anfangen bisschen das alles zusammenzubringen und mal zu überlegen wie kriege ich diese
  595. 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
  596. ein Waldbrand oder implodierten Planeten oder sowas das ist dann einfach anforderungsgeschichte die kleinen
  597. 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
  598. Objektorientierung da werde ich mir jetzt richtig viel Zeit lassen ich werde so ein bisschen introduction teasing jetzt heute im zweiten Block machen wenn
  599. 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
  600. 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
  601. 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
  602. die Objektorientierung für viele ist das echt ein Problem in Java ist es systeminerent das heißt die Objektorientierung ist bei
  603. Java einfach Bestandteil das wird euch dann auch im zweiten Semester deutlich zugute kommen dass ihr schon wisst was ist eine Datenstruktur was ist
  604. 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
  605. 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
  606. was eine Funktion ist wir haben Methoden verwendet ohne zu wissen was eine Methode ist wir haben
  607. 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
  608. Bibliothek herkommen und dementsprechend gewisse Methoden bereitstellen im Begriff Klasse haben wir noch nicht definiert und auch viel andere Dinge
  609. 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
  610. 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
  611. 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
  612. 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
  613. verstehen nur es ist so ein bisschen eine Geschmackssache die einen entwickeln sehr gerne Skripts das startet oben
  614. 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
  615. relativ überschaubar wenn ich aber jetzt anfange z.B mit Datenbanken oder mit anderen Highlevel und High Class Funktionalitäten dann
  616. 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
  617. 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
  618. 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
  619. 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
  620. prozedualen oder sequentiellen Programmierung zu einer Objektorientierung gibt es sich automatisch ein paar mehr Möglichkeiten
  621. 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
  622. komplexer aber wenn ich diese Komplexität eben greifen kann verstanden habe dann ist es in sich geschlossen einfach eine saubere und strukturierte
  623. Art der Programmierung und alle highclass Programme die ihr Schreiben werdet unabhängig ob es Python C++ Java ist haben Objektorientierung inherent
  624. 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
  625. irgendwo seine sseinsberechtigung dann ist da irgendwo was was irgendwo von Interesse ist so die objektorientierte Programmierung ist letztendlich eine
  626. programmierparadigma mit dem Programme so strukturiert werden dass Eigenschaften und Verhaltensweisen in einzelnen Objekten
  627. 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
  628. 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
  629. 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
  630. vielleicht habe ich dann noch Untergattungen unterspezies und dort Erbe ich die Information die generisch in der Blaupause Tier hinterlegt sind
  631. 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
  632. vielleicht noch mit einem bestimmten Winkel behaftete Sicht auf irgendetwas ein Gebäude technische Zeichnung oder ähnliches gebe und ihr könnt es
  633. vorausgesetzt ihr wisst so ein bisschen wie ihr mit Blaupausen umgeht nachproduzieren W ich e also ein Blaupause gebe von einem Quader der
  634. 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
  635. und zeichne euch das in einer Blaupause dann könnt ihr diesen Quader ganz ganz oft nachbauen Haup kein Problem versteht was da drin
  636. 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
  637. 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
  638. 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
  639. 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
  640. 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
  641. irgendwie funktioniert ich fange da mal mit dem Beispiel an ich versuch mal mit dem Beispiel anzufangen das
  642. 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
  643. Datei so und die nenne ich jetzt mal oop.p da spielen wir ein bisschen rum
  644. also Objekt [Musik] Orientierung in Python da machen wir was
  645. 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
  646. 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
  647. Gott bei bei den Dingen da warum auch nicht ne wenn wir jetzt z.B [Musik]
  648. einen na ja employees heißen sie amerikanischen z.B Mitarbeiter von der USS Enterprise nehmen wollen da gibt's ja paar die
  649. 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
  650. vielleicht ein alter vielleicht irgendwie auch ran und vielleicht sogar noch eine employee ID weil irgendwann wird man ja eingestellt und damit man
  651. eindeutig zuordnenbar ist dann hat man vielleicht noch ein ID in der Vergangenheit haben wir das wie vololg gemacht wir haben hier kirking
  652. 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
  653. Element 1 das heißt das ist glaube ich James heiß ne James KK ja James dann machen wir ganz richtig genau
  654. 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
  655. 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
  656. 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
  657. 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
  658. 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
  659. mal und der ist Wissenschaftsoffizier wenn schon Deutsch ma m K schreiben
  660. 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
  661. 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
  662. 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
  663. 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
  664. Alter dann haben wir schon erstes Problem wir machen hier mal
  665. [Musik] medizinischer Offizier und z 2002
  666. 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
  667. 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
  668. plötzlich ein String aus oder vielleicht auch nicht das ist also schon mal eine erste Fehlermeldung hätte ich jetzt
  669. 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
  670. 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
  671. 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
  672. 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
  673. 5000 wird eng da kann die Objektorientierung helfen indem ich mir das Problem erstmal vor Augen halte think first Code later
  674. 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
  675. 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
  676. Jang gut ID vielleicht noch mehr gibt's noch was was noch brauchen also eine Blaupause für einen
  677. Mitarbeiter sein so detailliert wie du werden möchtest Größe Geschlecht
  678. 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
  679. Größe Geschlecht äh Gewicht äh Gehalt geburtstag
  680. hat noch jemand mehr zu bieten man kann sich immer wieder Sachen ausdenken das ist richtig man muss dann
  681. 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
  682. 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
  683. einzelnen das ist maximal Kacke das ist richtig Mist das macht keine riesige Freude und ich glaube das ist auch nichts was man
  684. 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
  685. Objektorientierung mache ich mir genau das zu nutze ich nehme einen Blaupause für meinen generischen Mitarbeiter der Mitarbeiter der USS Enterprise
  686. 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
  687. 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
  688. 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
  689. 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
  690. zwear unterschiedliche Objekte trotzdem haben die beide den gleichen Vornamen beide den gleichen Nachnamen es soll auch Leute geben die heißen gleich haben
  691. 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
  692. 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
  693. 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
  694. 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
  695. 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
  696. 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
  697. 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
  698. und ne musste mich mit dieser Thematik nicht auseinandersetzen die Schwierigkeit die haben wir jetzt hier wirklich schon mal erkannt und das ist
  699. 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
  700. 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
  701. 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
  702. 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
  703. bleiben wir bei der Blaupause wenn ich also jetzt diese Blaupause habe und ich kann jetzt jeden einzelnen meiner Objekte eben
  704. ä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
  705. 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
  706. 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
  707. ne Geburtsdatum macht dementsprechend mehr Sinn habe ich ja glaube ich auch so reingeschrieben weil dann das kann ich errechnen wenn ich ein alter
  708. reinschreibe muss ich jedes Jahr irgendwie gucken dass ich das dann ein inkrementiere ist müsig das sind aber Erfahrungswerte
  709. ne mit so Alter zu arbeiten ist dann schwierig das kann sich aus diesen Sachen aber ergeben so der jetzt geheiratet kriegt
  710. also neuen Nachnamen fertig klassenaufruf Nachname gleich überschreibe ich Kork KK mit Kork hab
  711. 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
  712. mehr ich bin jetzt ein Weibchen er sein Geschlecht we weil das toll findet Geschlecht haben wir auch drin gerade sogar
  713. 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
  714. 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
  715. eingetragen wenn ich den Verlauf von etwas haben Mö speicher ich mir den Verlauf irgendwo Weg ganz gesondert ne solche
  716. 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
  717. 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
  718. ich innerhalb von einem Jahr z.B Lockdown bedingt so zu viel Kilo zugenommen habe abgenommen habe oder sogar gleich gebliebenin das heiß darauf
  719. kann ich dann analysieren also auch ein Vorteil dass ich mit dieser Objektorientierung auch die Möglichkeit der
  720. Analyse benutzen kann so naen wir hier Begrifflichkeiten die wir da verwenden werden ich nutze mal eine wir
  721. werden das wie gesagt nächste Woche ganz ganz ganz ganz fein granuda machen aber die Begrifflichkeiten die Daum benutzt werden ist z.B
  722. 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
  723. klasse also die Begrifflichkeiten ist eben ist ein anderer Typ es ist keine Variable es ist eine Klasse eine Klasse kann eben Elemente
  724. 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
  725. 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
  726. 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
  727. 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
  728. Änderungen haben die einzige Änderung die in der Programmierung vonstatten geht ist dass sie auf unterschiedlichen Adressen in meinem Speicher gespeichert
  729. 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
  730. das heißt auch a alles drei unterschiedliche Instanzen aus meiner aus meiner Blaupause heraus die
  731. zufälligerweise den gleichen Namen haben aber können unterschiedliche Inhalte haben ne kann anderes Geschlecht andere ID oder was auch immer sein irgendwas
  732. 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
  733. 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
  734. Klasse Hund ja irgendwas mitgeben es gibt ja unterschiedliche Rassen im englischen sind das ja breeds da gibt's Jack Russel terer weimaranaer
  735. Schäferhund unendlich viele unterschiedliche Rassen wenn ich jetzt jedes Mal da die Rasse eintragen muss dann wird das sicherlich schon relativ
  736. 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
  737. 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
  738. Gattung und die kann ich dainterlegen ich muss bei diesen Dingen eine Kleinigkeit beachten machen wir
  739. 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
  740. 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
  741. 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
  742. 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
  743. 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
  744. pun Name istle Name und ein self Punkt Alter ist GLE Alter das heißt immer dann wenn ich
  745. meine Elemente initialisiere erwartet er dass ich einen Namen und ein alter hinzugeben das self kommt ganz automatisch das ist quasi ein
  746. neues Objekt das wird im Speicher angelegt und dementsprechend zugeordnet und daraus kann ich dann die unterschiedlichen Objekte wunderbar
  747. voneinander differenziereni nicht vor in dem Fall ist es ja eine Definition nö die kommen ja dann irgendwann später
  748. 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
  749. damit man mal den Begriff darstellt wir haben self. Name ist g Name das generiert ein sogenanntes Attribut namens Name dem ich einen
  750. 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
  751. 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
  752. 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
  753. 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
  754. generiert auch ein Attribut dem ich einen Wert hinzufügen kann wie alt das ganze ist so die
  755. 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
  756. 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
  757. ä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
  758. 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
  759. 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
  760. mein meine klassenattribute das der konstr genau das der Konstruktor in dem kann ich auch
  761. sagen es gibt z.B eine Spezies [Musik] Spezi speies glaub so geschrieben genau und
  762. das ist jetzt von mir aus irgendwie was ist das und keine Ahnung wird man jetzt irgendwie den lateinischen Fachausdruck
  763. 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
  764. 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
  765. wählbar hier kann ich einen eigenen Namen für mein Objekt nutzen und ein eigenes Alter soweit so gut wenn ich das jetzt
  766. mal verwenden möchte dann kann ich ja mal gucken dass meine Funktion hier
  767. unten vielleicht ja mal guck mal ob das jetzt funktioniert
  768. 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
  769. zwei Parameter offenkundig ne jetzt kann ich z.B mal sagen mein Hund der
  770. heißt buddy ist gleich generiert aus meiner Klasse heraus aus meiner Blaupause Hund und der
  771. 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
  772. 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
  773. 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
  774. ausgebe ist mein Cursor da z.B sage ich jetzt BU jetzt se ich plötzlich Name Spezies und irgendwo hier unten drunter wird
  775. 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
  776. dargestellt dann muss ich das glaube ich mit Print machen
  777. print ja dann krieg ich das Alter zurück und wenn ich sage ich will dann eben das Alter vielleicht sogar noch mal ändern
  778. das heißt wir machen jetzt hier noch mal weiteren Befehl rein und sagen BU Alter 12 und machen wieder ein print body
  779. 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
  780. 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
  781. ändere es hier und lese es noch mal aus nach Adam Riese sollte dort 9 und 12 jetzt rauskommen
  782. n genau und natürlich kann ich mir auch noch weitere Informationen ausgeben lassen
  783. 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
  784. herausfiltern das ist Objektorientierung ich sag mal die ganz
  785. ganz ganz ganz ganz ganz Basisinformation ich kann natürlich auch noch mehr machen werden uns dann sicherlich auch noch noch mal andere
  786. Beispiele heranziehen dass wir dort eben nicht nur mit Hunden und Katzen oder ähnliches arbeiten vor allem haben wir auch noch nicht mit
  787. Vererbung gearbeitet ne so eine zter und Getter Funktion kann ich natürlich als define in meine Klasse hinzufügen damit ich nicht
  788. 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
  789. 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
  790. kann jetzt hier auf diese einzelnen Informationen zurückgreifen putzig m Spezies das kann ich übertragen ich
  791. 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
  792. behafte dann wird das auch funktionieren und jetzt kriegt buy einfach mal eine neue Spezies und ist jetzt eine
  793. Katze das macht so viel einfacher nicht in jeder Liste die einzelnen Objekte noch mal zu verändern sondern wir haben dann einen
  794. 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
  795. 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
  796. die hat eine Farbe Anzahl Türen Preis 1000 Informationen und da versuche ich mir die Dinge am Anfang herauszufiltern die wirklich sehr
  797. 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
  798. 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
  799. 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
  800. 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
  801. relevant vielleicht auch Preis aber garantiert nicht Kilowatt weil ich gebe ja bei einem Fahrrad idealerweise die Kilowatt in menschlicher Form vor wenn
  802. 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
  803. sogenannten Vererbungen also inheritance inheritance ist ist das
  804. amerikanische Wort dafür und da kann ich so viele tolle Sachen machen
  805. 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
  806. 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
  807. 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
  808. 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
  809. der Return ist ein print formatierten print das het ich ich habe hier die gleichen Dinge die wir
  810. vorhin auch angesetzt haben self. Name ist oder
  811. ist also der Name das wäre dann budy ist und jetzt das Alter self.
  812. Alter Jahre altt Punkt das heißt wir haben weiterhin eine Klasse in der habe ich me Initialisierung die wurd auch abgefragt
  813. vorhin das haben wir gesehen der brauchte dann einfach diese zwei Parameter und hier würde man wenn man jetzt die Beschreibung verlangt von
  814. dieser Klasse ein Output bekommen so und das machen wir wie folgt wir nehmen jetzt hier unten wieder unseren bodyd und jetzt hat man
  815. hier Beschreibung und machen weil wir ja kein Parameter hinzufügen gehen wir das raus und wenn wir das jetzt ausführen
  816. 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
  817. das ganze packe ich noch in den Print rein damit es mir auch angezeigt wird hur
  818. 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
  819. 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
  820. 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
  821. 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
  822. 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
  823. 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
  824. unterschiedlichen Klassen wunderbar miteinander verzahnen ne dann gucken wir noch mal das war die Objektorientierung hier noch
  825. mal ein bisschen in Vordergrund stellen letztendlich ja komm ich mal Outputs und schieb das euch mal
  826. rüber ich habe da was vorbereitet würde ich sagen irgendwie hier ist jetzt mal Notebook objektorientierte
  827. Programmierung ist eine der größten Herausforderung für Beginner wenn sie lernen pyon zu programmieren es gibt viele vielleicht auch zu viele Übungen
  828. 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
  829. 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
  830. 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
  831. gehört es gibt Funktionen Methoden kann man voneinander unterscheiden Vererbung mal mit euch nicht mehr heute also bin sicherlich sehr
  832. 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
  833. 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
  834. 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
  835. 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
  836. 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
  837. 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
  838. Objektorientierung eingebaut die wir bisank mit so einem grauen Schleier behaftet haben aber nicht reingeguckt unds ist aber immer aufgefallen und ich
  839. 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
  840. 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
  841. 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
  842. 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
  843. ich X ist Beispiel ich kann y ist Beispiel Z ist Beispiel ich kann millionenfache unterschiedliche Beispiele davon machen die sind alle
  844. 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
  845. und das Beispiel Main haben wir vorhin kennengelernt in unserem Beispiel was wir mit dem vcod
  846. benutzt ja hundmethode und Attribute also self pun Attribut gleich irgendwas die inetfunktion haben wir vorhin ja gemacht also die Klasse Hund mit einer
  847. 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
  848. 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
  849. erweitern ich kann mir jetzt ausgeben welche Rasse hat Sam welche Rasse hat Frank gar kein Problem habe ich noch
  850. 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
  851. 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
  852. mich verwirren kann ne underline documentation und so weiter hier irgendwelche inmodule und so weiter und sofort also String Slots das sind ja
  853. 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
  854. 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
  855. 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
  856. ist immer alphabetisch immer wenn ihr euer Jupiter euer ure tulkette hier in englisch installiert habt dann ist es trotzdem
  857. 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
  858. irgendwas mit Z oder sowas genannt dann wäre die hier unten aufgetaucht also unterhalb dieser ganzen komischen underline underline Dinge das kann arg
  859. verwirren deswegen haben wir relativ spät jetzt erst damit angefangen überhaupt mit einer IDE zu Werken dieser punktoperator gibt mir
  860. also immer die Möglichkeit und hier schon mit dem Punkt sofort im Jupiter Notbook musste ich den Tabulator benutzen funktioniert aber nach dem
  861. gleichen Prinzip zeige ich euch noch mal wenn ich also hier ein weitere Zelle hinzufüge und ich sag jetzt hier noch mal
  862. 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
  863. 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
  864. relativ simpel und einfach das der Unterschied zwischen Notebook also Jupiter Notebook und am Ende der IDE hier Vollzugriff ich sehe sofort
  865. alles und möglicherweise auch Dinge die ich nicht [Musik] brauche00 si doch ganz gut aus dann
  866. 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
  867. 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
  868. 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
  869. 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
  870. 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
  871. antragen ihr habt das ich versuche mal was ich hoffe mal dass es geht einfach mal hier unten ist egal
  872. Import cv2 perfekt funktioniert habe jetzt die Bibliothek open CD hinzugefügt haben wir auch Sachen kennengelernt ich wollte z.B
  873. 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
  874. 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
  875. 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
  876. Klassen benutzt ohne zu wissen dass Klassen sind ne von Z vergleichen
  877. ja das heißt ja das heißt wir nehmen noch einen zweiten Hund wie wollen wir ihn nennen erstm
  878. Mode die Klasse Schreiben ahag der gleiche Alter
  879. übergeben dann halt einmal sich selbst und einmal noch ander und einen Hund
  880. genau gut so mit Klammer auf Klammer zu Mus mal
  881. gucken kommt ein genau so da möchtest du jetzt Print oder was Turn und dann schauen wir halt wel von
  882. 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
  883. gleich dog und dann machen wir genau
  884. 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
  885. 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
  886. zeigen dass das also durchaus sehr mächtig istigent wir können diese R ein Geschichte weglassen einfach sagen self
  887. Alter ist größer als alter ja ja lass weg genau if self pun alter kleiner gleich größer gleich oder was auch
  888. immer gleich Doc Punt Alter ja dann wir
  889. D ne nicht dann brauchen wir Flo ja also dies FL bedeutet na ja genau machen wir dieses F
  890. davor dann können wir ja also Klammer geschweifte Klammern das
  891. ist dann doc. wie haben wir jetzt genannt Alter Alter Alter
  892. ja sein Namen genau ach ja ja genau
  893. Name ist älter Alter und dann gehen wir davon aus dass sie nicht gleich
  894. gut els und Print also genau Print und da gehen wir jetzt wieder von
  895. F so aus weg damit furchtbar und da möch du jetzt äh self. Name ist älter ja ja
  896. gucken wir mal was dabei rauskommt das gleicht genau wir müssen noch ein zweiten Hund generieren genau das heißt wir haben
  897. hier den Hund Buddy wir haben ja jetzt hier ganz viele Sachen könen wir mal wegmachen ne das können wir
  898. 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
  899. er mir schon den Namen keine Ahnung body 2 müssen wir eigentlich nennen und das natürlich als String und
  900. den geben wir jetzt mal Alter von W was nehmen 12 gut jetzt K wir an Vergleiche body Punkt Vergleich Alter so
  901. mit dem Doc die 2 so willst es haben
  902. guck funktioniert genau eine ist mein eigenes und das andere ist der Vergleich mit
  903. etwas anderem schpiel konstruiert und man merk automatisch glaube ich sehr gut dass die Objekte eben auch gleiche Inhalte haben könnten
  904. 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
  905. 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
  906. ganz coole Nummer gucken noch malim Notebook noch mal was bisschen mehr haben Sam Spezies Methoden ja z.B hier ein
  907. 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
  908. 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
  909. 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
  910. 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
  911. 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
  912. aktuellen Wert mit einer getfunktion das ist sauber weil ich dann an der Stelle wirklich sage wenn hier jemand eine Variable überschreibt die
  913. eigentlich einen String war aber jetzt plötzlich eine Zahl ist dann achtung das kann ich in dieser Klassendeklaration also in dieser
  914. 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
  915. 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
  916. 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
  917. 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
  918. 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
  919. Variable bitte S würde auch gehen ja ist dann halt so sauber war weil alle Dinge die meine
  920. attributvariablen auf globaler Ebene sind sind dann idealerweise mit einem Namen behaftet nur Schi P würde glaube ich
  921. hier tatsächlich schauen mal das macht genau es haben wir dort festgelegt aber das dann auch übergeben wird also
  922. 12 5 noch was nein Marker nicht Pi ist nicht definiert weil es außerhalb meiner Definition hier ist außerhalb meiner
  923. 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
  924. 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
  925. Objekt generiere hat das auch wieder 3.14 aber ich kann es auch überschreiben wenn ich möchte für jedes individuelle
  926. Objekt gerade gehabt wenn ich nur P schreibe ja aber in meiner Klasse nicht in meiner Funktion und ich mste das oben
  927. dann als ah okay da das ist das Public wahrscheinlich genau so und dann habe ich aber invalid
  928. Syntax weil global P eben dann auch schon wieder wie war das selber mal gucken mit den globalen und nicht globalen
  929. Sachen global klasse da musste ich was aufpassen
  930. ja genau ich muss es erst setzen und dann p= 3.14 das ist
  931. 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
  932. 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
  933. andere Variablen als Konstruktor mit in meine attributbeschreibung packe dass ich die vielleicht auch noch mal ändern möchte ne
  934. 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
  935. 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
  936. also entweder ist eine Variable lokal oder sie ist eben global ne also noch kein anderen Anwendung na ja in
  937. 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
  938. PI Punkt zack müsste jetzt auch wieder funktionieren genau D das Beispiel
  939. herstellen also letztendlich das könnt ihr Mirer beantworten ob das verständlich ist ne ob das irgendwo eingängig ist wir werden
  940. 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
  941. kann dann wird's noch mit Vererbung lustig und mit me Vererbung noch viel lustiger aber das Funktionsprinzip bleibt immer gleich denkt immer mal
  942. 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
  943. 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
  944. Grundinformation und damit muss ich nicht 1000 neue Information eintragen sondern kann die Dinge eintragen die anders sind also die Unterscheidungen
  945. hervorheben und das macht es von der Strukturierung deutlich angenehmer wenn ich von generischen Dingen in feingranulare Dinge gehe
  946. 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
  947. dazu gehören Labradore Huskys etc da gibt's dann Katzen dazu gehört keine Ahnung mainon scottisch fold oder wie die
  948. 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
  949. aber von der ursprünglichen die Zusatzinformation n die einfach Spezies möglicherweise haben oder irgendwelche anderen Information also das gucken wir
  950. 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
  951. ihr das verstanden habt dass ihr das mit der Objektorientierung jetzt so als Bonus für heute mitnimmt dass das schon mal
  952. sacken lassen könnt werden auch noch bisschen Hausaufgaben und sowas war alles nächste Woche für Objektorientierung diese Woche nicht für
  953. 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
  954. ist einfach wir haben mal was programmiert in einer anderen Umgebung die haben wir jetzt kennengelernt und es hindert uns jetzt eigentlich auch nichts
  955. 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
  956. 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
  957. 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
  958. 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
  959. Code und Ausgabe miteinander kombiniert euch zur Verfügung stellen das hier ist eben hacking da muss ich jetzt anfangen
  960. wirklich selbständig Programme zu gestalten da könnt ihr ein bisschen ausprobieren also es hindert euch niemand da dran auch nach dieser
  961. Veranstaltung oder kurz vorher kurz nachher noch eigenständig Erfahrung zuammeln und das ist immer wertvoll denn der Programmier Sprache ist wie auf eine
  962. 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
  963. 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
  964. 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
  965. 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
  966. möglicherweise ertrinken kann ne also machen wirklich machen und eure eigenen Erkenntnisse und Ergebnisse dann einfach auch mal gegenüberstellen und gucken wie
  967. 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
  968. Einschalten mitmachen und gestalten das hat mir heute mal wieder richtig Freude gemacht hat richtig Spaß gemacht auch dass er Dach mit eigen
  969. 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
  970. Sinne viel Spaß und ich bin dann raus tschüss

Zum Nachlesen