1
00:00:01,920 --> 00:00:05,040
Hallo Leute zur Folge 100 von 
einfach komplex. 

2
00:00:05,200 --> 00:00:07,680
Wir haben es 100 Folgen 
Schaftpoker ist das nicht cool? 

3
00:00:08,000 --> 00:00:10,880
Ja, das ist ziemlich cool. 
Ja, bisschen ja, bisschen krass 

4
00:00:10,880 --> 00:00:13,520
irgendwie und sehr besonders 
irgendwie die Folge runter zu 

5
00:00:13,520 --> 00:00:16,640
machen jetzt irgendwie. 
Extrem besonders und vorweg 

6
00:00:16,640 --> 00:00:19,440
bevor wir jetzt hier starten, 
erstmal ein fettes Dankeschön 

7
00:00:19,440 --> 00:00:21,600
fürs Hören. 
Wir haben inzwischen fast 7000 

8
00:00:21,600 --> 00:00:23,120
Follower irgendwie auf diesem 
Podcast. 

9
00:00:23,840 --> 00:00:26,480
Ich weiß gar nicht täglich n 
paar 100 Abrufe von den Folgen 

10
00:00:26,480 --> 00:00:29,040
und so und ja echt super 
Feedback. 

11
00:00:29,040 --> 00:00:31,120
Also man sieht es an den Sternen
und wir kriegen immer wieder 

12
00:00:31,120 --> 00:00:32,800
fragen und wir kriegen 
inzwischen auch n paar 

13
00:00:32,800 --> 00:00:34,360
Kundenanfragen durch den 
Podcast. 

14
00:00:34,360 --> 00:00:37,760
Also vielen Lieben Dank und 
macht gerne weiter so und hört 

15
00:00:37,760 --> 00:00:41,360
uns immer ordentlich zu so und 
wir haben tatsächlich auch mal 

16
00:00:41,360 --> 00:00:43,400
die Frage bekommen oder den 
Hinweis Hey mach doch mal was 

17
00:00:43,400 --> 00:00:45,840
über heisenware ja das würde 
mich total interessieren, hat 

18
00:00:45,840 --> 00:00:48,800
irgendein Hörer mal geschrieben 
und seitdem geisterte das so in 

19
00:00:48,800 --> 00:00:51,720
unserem Kopf rum und. 
Jetzt wollen wir natürlich die 

20
00:00:51,720 --> 00:00:54,080
Folge 100 Mal nutzen und n 
bisschen was über Heisenware 

21
00:00:54,080 --> 00:00:55,520
erzählen. 
Und Heisenware ist ja eigentlich

22
00:00:55,520 --> 00:00:58,920
unsere Firma und unser Produkt 
auch ein Low Code Application 

23
00:00:58,920 --> 00:01:01,840
Builder. 
Die Heisenware erlaubt Personen 

24
00:01:01,840 --> 00:01:04,239
sag ich mal mit technischem 
Background viel schneller und 

25
00:01:04,239 --> 00:01:08,720
einfacher eigene Web Software zu
bauen, Web Apps die sich eben 

26
00:01:08,720 --> 00:01:13,040
auch besonders gut noch in 
bestehende Systeminfrastrukturen

27
00:01:13,040 --> 00:01:15,760
integrieren, also zum Beispiel 
im produzierenden Gewerbe oder 

28
00:01:15,760 --> 00:01:18,480
in anderen. 
Industrien, die ja lange 

29
00:01:18,480 --> 00:01:20,680
gewachsen sind und wo viele 
Systeme mit der Zeit dazu 

30
00:01:20,680 --> 00:01:24,720
gekommen sind, dort Software zu 
bauen, die für jedermann 

31
00:01:24,720 --> 00:01:26,440
nachvollziehbar ist. 
Wie ist eigentlich diese 

32
00:01:26,440 --> 00:01:29,080
Software gebaut worden und dann 
auch einfach änderbar und ohne 

33
00:01:29,080 --> 00:01:31,440
IT Aufwand treibbar? 
Das ist mal so ganz kurz was was

34
00:01:31,440 --> 00:01:33,520
was was die heißen da macht und 
jetzt gucken wir uns das aber 

35
00:01:33,520 --> 00:01:36,400
mal von der technischen Seite 
heute an, wir haben die Chance 

36
00:01:36,400 --> 00:01:38,080
Burkhard Mal zwischen die Ohren 
zu gucken. 

37
00:01:39,280 --> 00:01:41,920
Zwischen die Ohren auf und liest
da alles gewaschen. 

38
00:01:42,720 --> 00:01:45,120
Und und so rauszufinden, was hat
er sich eigentlich dabei 

39
00:01:45,120 --> 00:01:46,480
gedacht? 
Weil ja. 

40
00:01:46,800 --> 00:01:49,200
Die Idee kommt von Burkhard, die
größte, der größte Teil der 

41
00:01:49,200 --> 00:01:51,240
Umsetzung natürlich auch. 
Ich glaub, wir arbeiten da als 

42
00:01:51,240 --> 00:01:53,840
Firma alle zusammen mit, aber 
das ist schon so, dass es 

43
00:01:53,840 --> 00:01:56,480
burkhards Baby ist. 
Die heißen wir und die Software 

44
00:01:56,960 --> 00:02:00,080
und daran wird uns heute 
teilhaben lassen, oder Burkhard 

45
00:02:00,080 --> 00:02:01,120
auf. 
Jeden Fall. 

46
00:02:01,120 --> 00:02:05,360
Ja genau ja danke Gerald. 
Ja die Idee, das war meine Idee,

47
00:02:05,360 --> 00:02:08,240
um das klarzustellen, aber die 
Firma ohne Firma geht gar 

48
00:02:08,240 --> 00:02:11,280
nichts, ja alleine bist du 
verloren, das Team braucht es um

49
00:02:11,280 --> 00:02:14,240
dann sowas auch in die Realität 
tatsächlich umzusetzen. 

50
00:02:14,320 --> 00:02:16,560
Ja genau. 
Tatsächlich ist die Idee schon 

51
00:02:16,560 --> 00:02:20,560
sehr alt, älter als die Firma 
und die Firma ist ja auch schon 

52
00:02:20,560 --> 00:02:23,320
gar nicht mehr so jung. 
Also ich glaube, das geht schon 

53
00:02:23,320 --> 00:02:26,560
irgendwie 8 Jahre zurück, 
vielleicht geht es sogar mental 

54
00:02:26,560 --> 00:02:29,200
in mir noch viel weiter zurück, 
weil ich immer schon irgendwie 

55
00:02:29,680 --> 00:02:31,680
ja so n so n so n Schmerz 
empfunden hab, das hab ich auch 

56
00:02:31,680 --> 00:02:33,920
schon mal bei VHPC gesagt, 
ungefähr was das für n Schmerz 

57
00:02:33,920 --> 00:02:35,280
ist. 
Aber das wollen wir heute noch 

58
00:02:35,280 --> 00:02:38,120
mal irgendwie gucken. 
Ja was was wir damit gelöst 

59
00:02:38,120 --> 00:02:40,320
haben und warum und wieso und 
wie die ganze Architektur 

60
00:02:40,720 --> 00:02:42,960
aussieht, es ist. 
Es ist ne große Aufgabe, die 

61
00:02:42,960 --> 00:02:45,360
komplette Heisenware als 
Architektur zu beschreiben und 

62
00:02:45,360 --> 00:02:48,400
es ist sowieso noch ne größere 
Aufgabe, das im Podcast zu 

63
00:02:48,400 --> 00:02:49,920
machen, ohne Bildchen und ohne 
alles. 

64
00:02:49,920 --> 00:02:52,920
Also Softwarearchitekturen gehen
fast eigentlich nie ohne 

65
00:02:52,920 --> 00:02:55,920
Diagramme und so, aber ich 
versuch es mal wieder irgendwie 

66
00:02:55,920 --> 00:02:58,960
da durch mich da durch zu 
Wursteln und Gerrit wenn wenn 

67
00:02:59,280 --> 00:03:02,320
ich anfange irgendwie n klaren 
Quatsch zu erzählen ja wie immer

68
00:03:02,320 --> 00:03:05,080
ne, dann hakst du noch mal nach 
und wollen das n bisschen 

69
00:03:05,080 --> 00:03:07,520
verstehen ne? 
Ich hake auf jeden Fall nach. 

70
00:03:07,520 --> 00:03:09,520
Ich glaub, was das Spannende 
jetzt hier wird oder das 

71
00:03:09,520 --> 00:03:11,480
schwierige auch für mich, ich 
hab ja die ganze Zeit n Bild vor

72
00:03:11,480 --> 00:03:13,840
Augen, ich weiß nämlich genau 
wie unsere Software aussieht, 

73
00:03:13,920 --> 00:03:17,200
ich kenn natürlich da auch schon
n bisschen was und so und ich 

74
00:03:17,200 --> 00:03:19,400
benutz das ja auch viel und ich 
erklär das ja auch Kunden und 

75
00:03:19,400 --> 00:03:24,720
zeig das und so und ich kann 
euch nur dazu einladen das auch 

76
00:03:24,720 --> 00:03:27,680
zu tun wenn ihr da Lust habt ja 
das ist klar n bisschen Werbung 

77
00:03:27,680 --> 00:03:30,480
aber ich meine wär ja vielleicht
auch cool, wenn man sich bei uns

78
00:03:30,480 --> 00:03:33,040
einfach mal n Account anlegt und
n bisschen rumspielt und mal was

79
00:03:33,040 --> 00:03:35,480
ausprobiert was Kleines baut. 
Wir haben viele tolle Tutorials 

80
00:03:35,480 --> 00:03:39,120
auch auf youtube und in unserer 
Dokumentation und vielleicht 

81
00:03:39,120 --> 00:03:42,080
gibt diese ganze Folge dann noch
n noch n bisschen mehr Sinn am 

82
00:03:42,080 --> 00:03:44,360
Ende, aber das ist natürlich 
kein muss, ich glaube man kann 

83
00:03:44,360 --> 00:03:46,240
auch so ne ganze Menge 
mitnehmen, es wird glaub ich 

84
00:03:46,240 --> 00:03:49,560
auch darum gehen Denkprozesse 
eines Softwarearchitekten jetzt 

85
00:03:49,560 --> 00:03:52,400
hier zu verstehen. 
Der der der, der gestern 

86
00:03:52,400 --> 00:03:55,080
Weihnachtsfeier hatte, glaub. 
Ich gestern Weihnachtsfeier 

87
00:03:55,080 --> 00:03:55,680
hatte. 
Genau. 

88
00:03:57,600 --> 00:04:01,240
So OK, na gut, aber ihr wisst 
was ich meine. 

89
00:04:01,240 --> 00:04:03,880
Ja, also auf jeden Fall kann man
hier schon auch n bisschen auch 

90
00:04:03,880 --> 00:04:06,480
sowas lernen und es wird keine 
reine Werbeveranstaltung ne wir 

91
00:04:06,480 --> 00:04:09,680
gucken uns auch eher die Technik
an und weniger das Drumherum. 

92
00:04:09,760 --> 00:04:12,760
Um diese Firma so also. 
Das soll es auch zur Einleitung 

93
00:04:12,760 --> 00:04:14,360
gewesen sein. 
Ne, da wollen wir nicht so lange

94
00:04:14,360 --> 00:04:16,480
rumschwafeln. 
Hey Ho, Let's go. 

95
00:04:16,959 --> 00:04:19,000
Wie wie strukturieren wir das 
denn jetzt hier heute mal? 

96
00:04:19,120 --> 00:04:20,880
Ja, ich hab mir natürlich n 
kleinen Plan gemacht. 

97
00:04:20,880 --> 00:04:22,640
Sowas schüttel dich jetzt auch 
nicht aus der linken Hand. 

98
00:04:23,120 --> 00:04:25,200
Mal gucken, wie meine Denkmuster
heute funktionieren, aber ich 

99
00:04:25,200 --> 00:04:26,320
fühl mich gerade ganz wach und 
fit. 

100
00:04:26,320 --> 00:04:30,600
Also insofern geht es los. 
Meine Idee war als Intro einmal 

101
00:04:30,600 --> 00:04:34,320
kurz das zu erwähnen, was was 
das was so n überliegendes Ziel 

102
00:04:34,320 --> 00:04:36,920
ist, noch viel überliegender als
vielleicht jetzt unsere Low Code

103
00:04:36,920 --> 00:04:40,360
Plattform und so weiter und das 
ist nämlich was mich eigentlich 

104
00:04:40,360 --> 00:04:44,080
immer genervt hat ist oder ne 
Idee die ich hatte es wär doch 

105
00:04:44,080 --> 00:04:47,360
toll wenn man den ganzen 
existierenden Softwarecode, also

106
00:04:47,360 --> 00:04:50,000
ich sprech vom Quellcode den es 
ja gibt. 

107
00:04:50,480 --> 00:04:52,880
Wenn man den irgendwie noch n 
bisschen leichter zugänglich 

108
00:04:52,880 --> 00:04:56,960
machen könnte, und zwar nicht 
nur für Softwareentwickler, 

109
00:04:56,960 --> 00:04:58,400
sondern auch für Leute, die 
vielleicht keine 

110
00:04:58,400 --> 00:05:01,440
Softwareentwickler sind, aber 
irgendwie nah dran. 

111
00:05:01,440 --> 00:05:05,520
Ja, weil da steckt ja so viel 
Power und so viel Know How drin 

112
00:05:05,520 --> 00:05:07,800
und ich weiß, unsere Zuhörer 
wissen es vielleicht, wenn man 

113
00:05:07,800 --> 00:05:10,760
es nicht weiß, aber man kann ja 
mal bei github gucken, das ist 

114
00:05:10,760 --> 00:05:13,840
halt gigantisch, ja man sieht 
wie viel Power da drinne steckt 

115
00:05:13,840 --> 00:05:17,920
in diesen Open Source Quellen. 
Daran, dass KI sehr gut ist im 

116
00:05:17,920 --> 00:05:20,640
Coden, ne, das hat nämlich 
gelernt mit den mit diesen 

117
00:05:20,640 --> 00:05:24,680
vielen quelloffenen, ja Stücken 
Code, die Tausende Probleme 

118
00:05:24,680 --> 00:05:26,680
lösen. 
Ne, es gibt ja halt für alles 

119
00:05:26,680 --> 00:05:28,160
irgendwie schon existierenden 
Code. 

120
00:05:28,160 --> 00:05:33,200
Ja, und die Schwierigkeit dabei 
ist das direkt den Mehrwert 

121
00:05:33,200 --> 00:05:35,440
daraus direkt rauszuschöpfen ne,
das ist nämlich nicht so 

122
00:05:35,440 --> 00:05:37,760
einfach, jeder hat dann 
irgendwie n Stück Quellcode 

123
00:05:37,760 --> 00:05:40,160
geschrieben und es passt nicht 
unbedingt zu dem das eine zu dem

124
00:05:40,160 --> 00:05:42,880
anderen. 
Die APIS sind nicht gleich, ich 

125
00:05:42,880 --> 00:05:44,520
muss mich einarbeiten in den 
ganzen Kram. 

126
00:05:44,520 --> 00:05:46,720
Ich muss es irgendwie 
installieren, ich muss das Main 

127
00:05:46,720 --> 00:05:49,960
tain und also ich muss halt 
quasi einen Sourcecode 

128
00:05:49,960 --> 00:05:53,000
schreiben, ne und das ist halt 
nicht so einfach so, wenn man es

129
00:05:53,000 --> 00:05:56,240
halt aber noch nicht gemacht hat
so, das ist das grundlegende 

130
00:05:56,240 --> 00:05:59,120
Ding und dann hab ich mir 
überlegt, was kann denn also wie

131
00:05:59,120 --> 00:06:01,520
kann man und das ist sehr 
fundamental. 

132
00:06:01,520 --> 00:06:03,440
Was ich jetzt sage, aber wie 
kann man im Prinzip diesem 

133
00:06:03,440 --> 00:06:07,640
Softwareentwicklungsteil, was 
ich eigentlich machen müsste ne 

134
00:06:07,640 --> 00:06:10,240
Abstraktion geben, die etwas 
drüber liegt? 

135
00:06:10,800 --> 00:06:12,960
Sodass ich mich nicht über 
diesen ganzen Scheiß befassen 

136
00:06:12,960 --> 00:06:17,680
muss, ich aber doch direkten 
Zugriff hab auf diese, auf diese

137
00:06:17,680 --> 00:06:20,400
quelloffenen Open Source 
Bibliotheken, die es so gibt. 

138
00:06:20,400 --> 00:06:23,640
Ja, und vielleicht auch auf Open
Source, der noch entsteht, den 

139
00:06:23,640 --> 00:06:28,440
ich dann dazufüge und so weiter 
ja ohne und es ist wichtig, ohne

140
00:06:28,440 --> 00:06:31,040
dass ich jetzt da irgendwie 
wieder ganz viel coden muss für 

141
00:06:31,040 --> 00:06:33,760
und und irgendwelche Rapper 
schreiben muss und so weiter ja 

142
00:06:33,760 --> 00:06:36,360
denn. 
Ganz oft heißt ja, offenen 

143
00:06:36,360 --> 00:06:38,840
Quellcode zu benutzen, dass ich 
wieder ganz viel eigenes Code 

144
00:06:38,840 --> 00:06:40,120
schreiben muss. 
Muss das irgendwie eindengeln 

145
00:06:40,120 --> 00:06:43,600
und so weiter das ist die, die 
der Start, die Grunderkenntnis, 

146
00:06:43,600 --> 00:06:47,760
die das Grundproblem von allem, 
was dann gefolgt ist, ja und was

147
00:06:47,760 --> 00:06:50,960
ich mir überlegt hab ist und und
was man designen musste ist, was

148
00:06:50,960 --> 00:06:54,200
ist halt quasi auf welchem Level
funktioniert diese 

149
00:06:54,200 --> 00:06:56,960
Abstraktionsebene, das hab ich 
auch schon ganz oft gesagt, das 

150
00:06:56,960 --> 00:07:00,560
definiert dann quasi auch sofort
auf welchem Level ein loco Tool,

151
00:07:00,560 --> 00:07:03,280
wenn ich nämlich das n bisschen 
anfassbarer und Benutzbarer 

152
00:07:03,280 --> 00:07:05,720
machen will. 
Dann zieht es quasi fest, auf 

153
00:07:05,720 --> 00:07:09,120
welchem Level die kleinsten 
Bauteile sag ich mal, wir sagen,

154
00:07:09,120 --> 00:07:11,080
wir sagen gerne Legosteine oder 
legoblöcke. 

155
00:07:11,080 --> 00:07:12,880
So kann man sich auch 
vorstellen, also das das 

156
00:07:12,880 --> 00:07:15,960
kleinste, die kleinste Entität 
die ich noch definieren und 

157
00:07:15,960 --> 00:07:18,560
bedienen kann, wo ist die und 
was ist das? 

158
00:07:18,560 --> 00:07:22,560
Ja und das definiert das ja und 
und tatsächlich bleibt es eine 

159
00:07:22,560 --> 00:07:25,600
Funktion im Sinne des Software 
Engineerings eine Software 

160
00:07:25,600 --> 00:07:29,360
Funktion und tatsächlich bleibt 
es auch eine Klasse und eine 

161
00:07:29,360 --> 00:07:32,160
Instanz ja und eine Funktion und
so weiter ja. 

162
00:07:32,960 --> 00:07:35,800
Und kurzum, man kann, ich hab 
das versucht, so n bisschen ja 

163
00:07:35,800 --> 00:07:37,160
noch mal in andere Worte zu 
verpacken. 

164
00:07:37,160 --> 00:07:41,440
Man könnte fast sagen, was wir 
haben ist n digitaler Zwilling 

165
00:07:41,440 --> 00:07:44,120
und das kennt das kennen so n 
Zuhörer ne von der von der 

166
00:07:44,120 --> 00:07:45,880
Machining, da sagt man halt ne 
Maschine und da haben wir n 

167
00:07:45,880 --> 00:07:48,480
digitalen Zwilling von der 
Maschine und was wir eigentlich 

168
00:07:48,480 --> 00:07:50,840
machen, das ist jetzt n bisschen
irre, aber das will ich gleich n

169
00:07:50,840 --> 00:07:53,000
bisschen länger noch drauf 
rumreiten ist wir haben so ne 

170
00:07:53,000 --> 00:07:57,040
Art digitalen Zwilling einer 
Softwarefunktion geschrieben, ja

171
00:07:57,440 --> 00:08:00,600
und warum digitaler Zwilling 
weil auf einmal wird die 

172
00:08:00,600 --> 00:08:04,800
Funktion anfassbar anschaubar. 
Und auch grafisch repräsentiert 

173
00:08:04,880 --> 00:08:07,920
in einer UI. 
Ja, und auch die Klassen und die

174
00:08:07,920 --> 00:08:11,680
Instanzen, die entstehen, was 
eigentlich so ja in so einer 

175
00:08:11,920 --> 00:08:14,680
höheren Sphäre operationspattern
sind in der Software, die kannst

176
00:08:14,680 --> 00:08:15,600
du. 
Normalerweise siehst du die 

177
00:08:15,600 --> 00:08:17,440
nicht, du machst Instanzen, die 
Leben halt im RAM. 

178
00:08:17,600 --> 00:08:20,400
Ja die sind da gibt es dann halt
n pointer während der Laufzeit, 

179
00:08:20,400 --> 00:08:22,080
aber das das kann man alles 
nicht fühlen, nicht sehen, nicht

180
00:08:22,080 --> 00:08:24,480
anfassen, auch die Funktionen ne
die sind halt irgendwie da und 

181
00:08:24,480 --> 00:08:28,120
laufen im Hintergrund, machen 
irgendwas ja und hier haben wir 

182
00:08:28,120 --> 00:08:30,400
versucht. 
An der Stelle was rauszuholen, 

183
00:08:30,400 --> 00:08:32,559
was ich jetzt mal für den 
Podcast, einen digitalen 

184
00:08:32,559 --> 00:08:36,120
Zwilling einer Funktion oder 
einer Instanz nennen würde, um 

185
00:08:36,120 --> 00:08:40,480
damit dann Code zu schreiben, 
tatsächlich also komplexe Dinge 

186
00:08:40,480 --> 00:08:43,799
zu lösen, weil diese Funktion 
jetzt wieder genau die Sachen 

187
00:08:43,799 --> 00:08:45,760
sein können, diese Open Source 
Bibliotheken, wovon ich gesagt 

188
00:08:45,760 --> 00:08:48,720
hab, open zum Beispiel OPCUA, 
irgendwas komplexe Protokolle, 

189
00:08:48,720 --> 00:08:51,840
alles schon fertig geschrieben, 
super getestet von Leuten und 

190
00:08:51,840 --> 00:08:54,080
jetzt wenn ich das aber als 
Funktion hier an ranholen kann, 

191
00:08:54,080 --> 00:08:56,080
grafisch, ja dann kann ich sagen
connect. 

192
00:08:56,560 --> 00:08:59,760
Die Funktion connect zu einem 
OPCA Server nehm ich einfach und

193
00:09:00,120 --> 00:09:02,800
guck was passiert. 
Und wenn ich connected bin, dann

194
00:09:02,800 --> 00:09:05,200
nehm ich ne andere Funktion und 
sage jetzt machst du das und das

195
00:09:05,200 --> 00:09:10,080
ja und das ist die fundamentale 
Idee und die gesamte Architektur

196
00:09:10,080 --> 00:09:13,840
die danach kommt ist quasi um 
diese fundamentale Idee zu 

197
00:09:13,840 --> 00:09:17,560
stützen und bedienbar zu machen 
und ja auch mit n bisschen Spaß 

198
00:09:17,560 --> 00:09:21,080
irgendwie und fun irgendwie dann
ja den den quasi letztendlichen 

199
00:09:21,080 --> 00:09:24,240
Nutzer ja zu ermöglichen quasi 
Code zu schreiben auf einer ganz

200
00:09:24,240 --> 00:09:26,240
neuen Ebene, ja. 
Das finde ich n ziemlich 

201
00:09:26,240 --> 00:09:28,000
spannendes Bild mit dem 
digitalen Zwilling. 

202
00:09:28,000 --> 00:09:31,720
Ich finde es passt gut so, ich 
weiß ja wie es aussieht bei uns 

203
00:09:31,720 --> 00:09:35,680
im Produkt, also man könnte auch
sagen n visuelles Abbild von von

204
00:09:35,680 --> 00:09:38,360
Code irgendwie n 
standardisiertes visuales 

205
00:09:38,360 --> 00:09:41,080
Abbild, vor allem ja alle 
Funktionen, egal was sie tun, ob

206
00:09:41,080 --> 00:09:44,480
es jetzt n connect ist oder n 
read oder nen Combine oder n 

207
00:09:44,480 --> 00:09:49,160
Merch oder whatever, die sind ja
alle auf ein gleiches Aussehen 

208
00:09:49,160 --> 00:09:52,960
gebracht bei uns also ein 
standardisiertes Abbild dieser 

209
00:09:52,960 --> 00:09:55,600
dieser dieser Funktion ne. 
Und ich find die find die 

210
00:09:55,600 --> 00:09:56,640
Beschreibung ganz schön. 
Ja und? 

211
00:09:57,360 --> 00:10:00,480
Wenn man das nämlich hat, und 
dann hat man also n digitaler 

212
00:10:00,480 --> 00:10:02,360
Zwilling heißt ja dann auch an 
der Stelle ne Art 

213
00:10:02,360 --> 00:10:05,160
Standardisierung. 
Ja, und das ist aber auch gar 

214
00:10:05,160 --> 00:10:07,920
nicht, da muss ich auch noch mal
drauf rumreiten, weil es ist ja 

215
00:10:07,920 --> 00:10:10,640
auch nicht so, dass wir nur 
einen eine Programmiersprache 

216
00:10:10,640 --> 00:10:13,360
haben, wir haben ja viele 
Programmiersprachen, es gibt C 

217
00:10:13,360 --> 00:10:16,000
plus plus, es gibt Python, es 
gibt Java Script, es gibt Java 

218
00:10:16,000 --> 00:10:18,680
und so weiter es gibt ja ganz, 
ganz viele, ja, und wenn ich 

219
00:10:18,680 --> 00:10:20,720
jetzt aber sage, ich hab einen 
digitalen Zwilling von der 

220
00:10:20,720 --> 00:10:23,440
Funktion gemacht, dann mein ich 
aber auch, dass es völlig Wurst 

221
00:10:23,440 --> 00:10:25,320
ist. 
Was die unterliegende echte 

222
00:10:25,320 --> 00:10:28,120
Funktion ist die physikalische 
Funktion, ob man so sagen will, 

223
00:10:28,120 --> 00:10:30,080
ja, ob die jetzt in Java 
geschrieben ist oder in C plus 

224
00:10:30,080 --> 00:10:33,360
plus mal egal. 
Ja, weil das wird abstrahiert 

225
00:10:33,360 --> 00:10:36,200
und standardisiert, ja, und wenn
man das dann hat, dann 

226
00:10:36,200 --> 00:10:40,160
ermöglicht das quasi, und das 
ist wichtig, ganz easy ne Mixtur

227
00:10:40,160 --> 00:10:42,840
von verschiedenen Bibliotheken 
zu nutzen, denn das ist nämlich 

228
00:10:42,840 --> 00:10:45,680
auch ne Wahrheit. 
Es gibt Open Source Tools, aber 

229
00:10:45,680 --> 00:10:47,920
manche sind in Python 
geschrieben und sind wunderbar 

230
00:10:47,920 --> 00:10:50,960
vor dem Number Crunching KI 
Machine Learning, ganz viel 

231
00:10:50,960 --> 00:10:53,120
Python. 
Dann gibt es wunderbare Sachen, 

232
00:10:53,120 --> 00:10:55,400
zum Beispiel PDF Handling oder 
so weiter weiß ich vielleicht in

233
00:10:55,400 --> 00:10:58,640
No JS geschrieben und auf einmal
kann ich die aber alle nehmen 

234
00:10:59,200 --> 00:11:02,720
und auch zusammenbringen und 
ineinander verhaken und 

235
00:11:02,720 --> 00:11:06,320
verketten ist völlig Wurst von 
welcher Technologie die 

236
00:11:06,320 --> 00:11:08,320
herkommen. 
Ja und das ermöglicht 

237
00:11:08,480 --> 00:11:11,960
gigantische neue Möglichkeiten 
ja dann weiter noch weil ich n 

238
00:11:11,960 --> 00:11:14,800
digitalen Zwilling hab der quasi
über n Netzwerk abstrahiert ist.

239
00:11:14,800 --> 00:11:17,320
Weil ich bin jetzt ja quasi in 
der in der UI, da kommen wir 

240
00:11:17,320 --> 00:11:18,800
später noch zu wie das genau 
funktioniert. 

241
00:11:19,240 --> 00:11:21,040
Hab ich auch ne 
Ortsunabhängigkeit drin? 

242
00:11:21,080 --> 00:11:24,720
Ne es ist völlig egal wo 
letztendlich die physikalische 

243
00:11:24,720 --> 00:11:29,560
Funktion die ich da ausführt ja 
im Shopfloor in der Cloud, hier 

244
00:11:29,560 --> 00:11:32,400
oder da direkt an der Maschine 
völlig egal. 

245
00:11:32,400 --> 00:11:35,240
Ja und es bleibt komplett 
similes, weil ich nur den 

246
00:11:35,240 --> 00:11:37,400
digitalen Zwilling in der Hand 
hab, der zeigt mir einfach immer

247
00:11:37,400 --> 00:11:39,520
an was was passiert. 
Die Argumente den den 

248
00:11:39,520 --> 00:11:42,640
Rückgabewert und so kommen wir 
noch dazu, ist aber egal wo die 

249
00:11:42,640 --> 00:11:45,360
Funktion ist ja. 
Die wird aber schon immer auf 

250
00:11:45,360 --> 00:11:47,680
irgendeinem Computer ausgeführt 
oder sowas. 

251
00:11:47,920 --> 00:11:49,760
Ja. 
Aber du siehst an einer 

252
00:11:49,760 --> 00:11:52,960
zentralen Stelle für dich sieht,
also das interessiert dich gar 

253
00:11:52,960 --> 00:11:54,320
nicht, wenn du bei uns das 
Produkt bedienst. 

254
00:11:54,320 --> 00:11:57,440
Ja, du siehst tatsächlich immer,
sieht immer gleich für dich aus 

255
00:11:57,440 --> 00:11:59,520
und es wird aber genau da 
ausgeführt, wo es ausgeführt 

256
00:11:59,520 --> 00:12:01,640
werden muss, um dein um dein 
Case zu erfüllen. 

257
00:12:01,640 --> 00:12:03,960
Jetzt in dem Fall. 
Genau, genau. 

258
00:12:03,960 --> 00:12:06,480
Es gibt quasi immer ein, das 
kann ich ja mal sagen, es gibt 

259
00:12:06,480 --> 00:12:09,040
immer ein Programm, was laufen 
muss, also die Funktion wird 

260
00:12:09,040 --> 00:12:11,720
jetzt nicht, also sie liegt 
nicht als Pfeil da irgendwo und 

261
00:12:11,720 --> 00:12:13,960
wir, wir hängen uns auch nicht 
an github dran oder sowas, 

262
00:12:13,960 --> 00:12:16,160
sondern. 
Es ist schon ein Programm, was 

263
00:12:16,160 --> 00:12:19,200
läuft und ein das Programm 
intern hat halt diese Funktion 

264
00:12:19,200 --> 00:12:24,480
zur Verfügung und das Programm 
im Prinzip agiert erst, indem 

265
00:12:24,480 --> 00:12:26,040
wir die Funktion von außen 
triggern. 

266
00:12:26,040 --> 00:12:29,400
Ne, das ist sehr anders, also es
gibt jetzt 2 Sorten sag ich mal 

267
00:12:29,400 --> 00:12:31,600
2 grundsätzliche Sorten von 
Programmen, es gibt ja so 

268
00:12:31,600 --> 00:12:35,160
Scripts die man kennt so da da 
sagt man los ja oder startet das

269
00:12:35,160 --> 00:12:37,400
und das fängt Halt von oben an 
und macht irgendwas und dann ist

270
00:12:37,400 --> 00:12:39,760
es fertig ja es hört dann auf zu
funktionieren, ja es hat dann 

271
00:12:39,760 --> 00:12:42,120
zum Beispiel. 
Das konvertiert zum Beispiel 

272
00:12:42,120 --> 00:12:44,480
deine ganzen J. 
Pegs in PNGS oder Irgendsowas, 

273
00:12:44,480 --> 00:12:46,880
die du da im Ordner drin hast. 
Ja dann rattelt das irgendwie. 2

274
00:12:46,880 --> 00:12:49,680
Minuten ist das fertig. 
Ja, das ist nicht das wovon ich 

275
00:12:49,680 --> 00:12:51,800
spreche, ja da sind auch 
Funktionen drin und so weiter 

276
00:12:51,800 --> 00:12:55,200
aber die führen sich von alleine
aus, es läuft Blackbox durch, ja

277
00:12:55,680 --> 00:12:58,600
ich spreche mehr von so Agenten 
das das Wort Agenten ist gar 

278
00:12:58,600 --> 00:13:00,720
nicht falsch, das hat man jetzt 
ja hört man durch die KI und so 

279
00:13:00,720 --> 00:13:04,760
weiter das sind quasi Lebewesen 
die also Programme die dauerhaft

280
00:13:04,760 --> 00:13:08,720
da sind die laufen 24 7 und 
können quasi von außen geschubst

281
00:13:08,720 --> 00:13:11,920
werden getriggert werden ja. 
Und wenn man das Halt machen 

282
00:13:11,920 --> 00:13:14,200
will in der in der Software, 
dann tut man das in dem, mit dem

283
00:13:14,200 --> 00:13:17,680
man irgendwie dafür sorgt, dass 
da drinne Funktionen ausgeführt 

284
00:13:17,680 --> 00:13:19,480
werden, getriggert werden und 
dann macht das Halt schon 

285
00:13:19,480 --> 00:13:21,760
irgendwas, das nämlich das, was 
in der Funktion implementiert 

286
00:13:21,760 --> 00:13:24,080
ist. 
Davon spreche ich ja genau und 

287
00:13:24,080 --> 00:13:26,120
deswegen brauchen wir ja 
laufende Programme, aber wo du 

288
00:13:26,120 --> 00:13:29,120
die startest, welchem 
Betriebssystem und so mit 

289
00:13:29,120 --> 00:13:31,560
welcher Technologie, ob das ein 
T plus plus Programm ist oder 

290
00:13:31,560 --> 00:13:34,480
ein Java Programm oder ein Note 
s Programm scheißegal. 

291
00:13:34,480 --> 00:13:36,680
Ja du wirst halt diese 
Funktionen sehen sobald das 

292
00:13:36,680 --> 00:13:39,040
startet. 
Das ist unsere Technologie, die 

293
00:13:39,040 --> 00:13:42,440
wir da haben, die die Funktionen
werden quasi gebeamt, also der 

294
00:13:42,440 --> 00:13:46,160
digitale Zwilling wird quasi 
gescannt aus den echten und dir 

295
00:13:46,160 --> 00:13:48,320
zur Verfügung gestellt zur 
Ansicht und zum in die Hand 

296
00:13:48,320 --> 00:13:52,640
nehmen als Legoblog für das Back
and bauen in deinem Baukasten, 

297
00:13:52,640 --> 00:13:54,440
den den, wie heißen wir lockhood
Bilder. 

298
00:13:55,120 --> 00:13:57,440
Und das Spannende ist jetzt nur,
das ist ja nicht nur zur Ansicht

299
00:13:57,440 --> 00:14:00,480
der digitale Zwilling, sondern 
indem du ihn dort befüllst mit 

300
00:14:00,480 --> 00:14:03,560
input, Argumenten und mit 
irgendwie einem Trigger oder 

301
00:14:03,560 --> 00:14:06,200
sowas Element konfigurierst du 
ja sogar. 

302
00:14:06,560 --> 00:14:09,480
Den Agenten zum Beispiel. 
Richtig, wenn wir jetzt so n 

303
00:14:09,520 --> 00:14:11,280
bisschen über die Architektur 
sprechen, da will ich dann noch 

304
00:14:11,280 --> 00:14:13,280
n Moment bleiben auf dem Level 
und dann haben wir jetzt ja 

305
00:14:13,280 --> 00:14:16,320
verstanden, dass wir quasi eine 
eine so ne Art digitalen 

306
00:14:16,320 --> 00:14:19,320
Zwilling einer Funktion haben 
und jetzt, wenn man jetzt als 

307
00:14:19,320 --> 00:14:21,680
Softwarearchitekt dabei ist, 
jetzt muss man ja das n bisschen

308
00:14:21,680 --> 00:14:23,600
genauer definieren, ne, also wir
haben so ne Art 

309
00:14:23,600 --> 00:14:27,760
standardfunktion, ne und das 
sind natürlich sehr fundamentale

310
00:14:27,760 --> 00:14:31,280
Software, fundamentale Dinge die
man jetzt aus sich bedenken 

311
00:14:31,280 --> 00:14:35,760
muss, denn das ist ja quasi. 
At the got, wie Software selber 

312
00:14:35,760 --> 00:14:38,560
funktioniert. 
Ja und ich hab halt versucht für

313
00:14:38,560 --> 00:14:40,720
mich hab das macht das ja auch 
nicht seit gestern aus zu 

314
00:14:40,720 --> 00:14:44,760
extrahieren. 
Was sind die Kernelemente und 

315
00:14:44,760 --> 00:14:47,120
zwar Cross den ganzen 
Technologien, die haben ja ihre 

316
00:14:47,120 --> 00:14:49,800
Unterschiedlichkeiten. 
Ja es ist schon so, dass Python 

317
00:14:49,800 --> 00:14:52,360
Funktionen anders sind und es 
vielleicht andere Ausprägungen 

318
00:14:52,360 --> 00:14:54,200
gibt als NC plus Plus und so, 
das kann man nicht 

319
00:14:54,200 --> 00:14:57,200
wegdiskutieren, aber was ist das
kleinste gemeinsame Vielfache 

320
00:14:57,200 --> 00:15:00,880
unter diesen unter dem Begriff 
Funktion, ja was gibt es da mit 

321
00:15:00,880 --> 00:15:05,480
dem ich quasi. 99,9% abdecken 
kann ja und zufrieden bin, damit

322
00:15:05,480 --> 00:15:07,400
es halt n generischer 
standardisierter Block, mit dem 

323
00:15:07,400 --> 00:15:10,680
Ich arbeiten kann, damit man 
später keinen keine Roadblocks 

324
00:15:10,680 --> 00:15:13,520
hat beim Bauen von von komplexen
Applikationen. 

325
00:15:13,520 --> 00:15:15,840
Ja und wenn man sich das 
anguckt, da kann man so n paar 

326
00:15:15,840 --> 00:15:17,680
Schlüsse schließen. 
Ja also ich hab die ebenfalls 

327
00:15:17,680 --> 00:15:21,200
geschlossen und ich hab gesagt 
es gibt erstmal 4 Kategorien von

328
00:15:21,200 --> 00:15:23,920
Funktionen 4 Typen von 
Funktionationen wenn du die 4 

329
00:15:23,920 --> 00:15:28,200
hast, dann kannst du 99,9% 
erschlagen von den Sachen die du

330
00:15:28,200 --> 00:15:29,840
brauchst. 
Ja und welche Typen gibt es? 

331
00:15:29,920 --> 00:15:32,680
Das gehen wir jetzt mal durch. 
Und die diese Typen der Funktion

332
00:15:32,680 --> 00:15:35,280
haben ganz eng was damit zu tun,
was objektorientierte 

333
00:15:35,280 --> 00:15:38,160
Programmierung ist. 
Was ja ein Pattern ist, was es 

334
00:15:38,160 --> 00:15:40,120
schon sehr lange in der 
Softwareentwicklung gibt und was

335
00:15:40,120 --> 00:15:42,960
sich durchgesetzt hat und was 
gekommen ist, um zu bleiben. 

336
00:15:43,080 --> 00:15:47,120
Ja und was quasi auch eingebaut 
ist in diese Open Source 

337
00:15:47,120 --> 00:15:49,280
Bibliotheken, die bestehen 
nämlich aus Klassen, ne, das 

338
00:15:49,280 --> 00:15:50,960
muss man einmal wissen, das 
hatten wir auch schon mal ne 

339
00:15:50,960 --> 00:15:52,880
Folge ich, wir nehmen das heute 
nicht im Detail auseinander, 

340
00:15:52,880 --> 00:15:56,960
Klassen sind quasi Blaupausen. 
Und können wiederverwendet 

341
00:15:56,960 --> 00:15:59,200
Instanziert werden, halten ihren
eigenen State. 

342
00:15:59,200 --> 00:16:02,080
Das sind dann die Instanzen der 
Klassen, ja, also das, das muss 

343
00:16:02,080 --> 00:16:04,520
man auf dem Zettel haben, wenn 
man das auf dem Zettel hat, dann

344
00:16:04,520 --> 00:16:06,040
gibt es 4 Kategorien Funktionen,
nämlich die 

345
00:16:06,040 --> 00:16:09,280
Konstruktorfunktionen, das ist 
ne sehr spezielle Funktion, das 

346
00:16:09,280 --> 00:16:12,000
ist quasi die Funktion in der 
Blaupause der Klasse, die sagt 

347
00:16:12,160 --> 00:16:17,840
Mach mal bitte eine neue Instanz
von mir ja, also mit einem State

348
00:16:18,320 --> 00:16:22,160
und dann gibt es da analog dazu 
die Destruktorfunktion. 

349
00:16:22,640 --> 00:16:25,120
Tatsächlich ist das nicht so, 
dass die, dass es die explizit 

350
00:16:25,120 --> 00:16:27,520
gibt, in allen 
Programmiersprachen, ich sag mal

351
00:16:27,520 --> 00:16:29,280
aus dem javascript gibt es zum 
Beispiel keine 

352
00:16:29,280 --> 00:16:33,280
Destruktorfunktion ja, aber ich 
sag nachher, warum das wichtig 

353
00:16:33,280 --> 00:16:36,320
ist in C plus Plus gibt es die 
zum Beispiel, aber die macht das

354
00:16:36,320 --> 00:16:38,800
Gegenteil, ja, also die 
Konstruktorfunktion sind da da, 

355
00:16:38,800 --> 00:16:41,200
die Ruf ich auf und dann 
entsteht eine neue Instanz und 

356
00:16:41,200 --> 00:16:44,720
bei der Destruktorfunktion dann 
sag ich lösch diese Instanz 

357
00:16:45,520 --> 00:16:48,720
macht macht es unglaublich. 
Bei uns heißen die immer create 

358
00:16:48,720 --> 00:16:50,960
und delete. 
Genau, gerät richtig. 

359
00:16:51,040 --> 00:16:54,680
Ja, genau das ist das, was ihr 
parallel anguckt, jetzt richtig,

360
00:16:54,680 --> 00:16:57,760
und das ist das, was wir dann in
der EUI machen, wenn wir sagen, 

361
00:16:57,760 --> 00:17:00,480
OK, wir machen den digitalen 
Zwilling unserer Funktion, dann 

362
00:17:00,480 --> 00:17:02,880
heißt das, dann gibt es ja auch 
wieder zig Namen und wir haben 

363
00:17:02,880 --> 00:17:07,040
einfach gesagt, Create und 
delete sind halt irgendwie ja 

364
00:17:07,200 --> 00:17:09,760
verständliche Namen dafür, dass 
man halt irgendwie ne Instanz 

365
00:17:09,760 --> 00:17:13,520
kreiert oder ne Instanz slash da
genau so und dann gibt es die 

366
00:17:13,520 --> 00:17:16,720
statischen Funktionen, die muss 
man auch einmal verstehen, die 

367
00:17:16,720 --> 00:17:20,720
statischen Funktionen agieren. 
Auf Klassenebene, das heißt, die

368
00:17:20,720 --> 00:17:23,359
sind immer richtig, die haben 
quasi keinen unterliegenden 

369
00:17:23,359 --> 00:17:26,319
State, wie man so schön sagt. 
Ja so so, statische Funktion 

370
00:17:26,319 --> 00:17:28,680
könnte zum Beispiel sein, ich, 
ich sag mal was ich hab ne hab 

371
00:17:28,680 --> 00:17:30,560
ich weil ich hab ich gerade im 
Kopf weil ich es gerade gemacht 

372
00:17:30,560 --> 00:17:33,440
hab, ich hab ne Klasse die zum 
Beispiel von so einem Raspberry 

373
00:17:33,440 --> 00:17:37,760
Pi diese GPIO Pins ausliest oder
irgendsowas ja da könnte ne 

374
00:17:37,760 --> 00:17:42,240
statische Funktion sein kann ich
überhaupt zugreifen auf so NGPIO

375
00:17:42,640 --> 00:17:44,640
in dieser Klasse? 
Ja ich hab ich hab so ne GPIO 

376
00:17:44,640 --> 00:17:46,120
Klasse. 
Und dann hab ich ne statische 

377
00:17:46,120 --> 00:17:48,320
Funktion, is accessible. 
Ja und die sagt einfach nur ja 

378
00:17:48,320 --> 00:17:50,840
oder nein ja, also kann ich 
gerade auf diese Hardware 

379
00:17:50,840 --> 00:17:54,160
zugreifen überhaupt, ja da muss 
ich jetzt nicht eine bestimmte 

380
00:17:54,160 --> 00:17:56,880
einen bestimmten Instanz von so 
einem PIN in der Hand haben, 

381
00:17:56,880 --> 00:18:00,400
sondern das ist ja ne 
grundsätzliche Information war 

382
00:18:00,400 --> 00:18:04,560
für diese ganze GPIO pin Klasse,
ja die die da funktioniert ja 

383
00:18:04,560 --> 00:18:06,640
aber wenn ich zum Beispiel und 
jetzt kommt der dritte Typ der 

384
00:18:06,720 --> 00:18:10,080
der vierte Typ der Funktion eine
Instanzfunktion und zwar hab ich

385
00:18:10,080 --> 00:18:13,680
die Klasse GPIO pin. 
Und ich sage, jetzt mach mir 

386
00:18:13,680 --> 00:18:16,360
eine Instanz für pin 26. 
Ich hab da ja relativ viele 

387
00:18:16,360 --> 00:18:19,040
Pins. 
Ja und jetzt sage ich, OK, ich 

388
00:18:19,040 --> 00:18:21,520
bin quasi solange ich lebe auf 
diesen PIN 26 gebunden und 

389
00:18:21,520 --> 00:18:23,560
darauf gibt es jetzt die 
Funktion Read und write ja und 

390
00:18:23,560 --> 00:18:26,680
wenn ich read mache und da kommt
halt 1 raus, dann heißt es PIN 

391
00:18:26,680 --> 00:18:29,680
26 hat 3,3 Volt Anliegen und ist
gerade true das ist eine 

392
00:18:29,680 --> 00:18:31,520
Memberfunktion oder 
Instanzfunktion die ist das 

393
00:18:31,840 --> 00:18:36,720
deswegen weil sie wissen muss, 
dass die PIN 26 ist. 

394
00:18:36,720 --> 00:18:44,160
Das ist Teil Ihres Days ja. 
Und dass die PIN 26 ist, konnte 

395
00:18:44,160 --> 00:18:46,400
ich ihr zum Beispiel im 
Konstruktor sagen. 

396
00:18:46,640 --> 00:18:48,920
Es führt mich gleich dann zu was
anderem, es führt mich nämlich 

397
00:18:48,920 --> 00:18:50,880
dazu, was wie Funktionen 
überhaupt grundsätzlich 

398
00:18:50,880 --> 00:18:53,920
aufgebaut sind, Funktionen haben
nämlich Argumente, ja, aber 

399
00:18:53,920 --> 00:18:56,320
jetzt trink ich kurz n Schluck 
Kaffee, Gerrit kannst ja auch 

400
00:18:56,320 --> 00:18:57,800
noch mal. 
Vielleicht machen wir mal kurz 

401
00:18:57,800 --> 00:19:01,040
ne Atempause und dann geht es 
gleich weiter was Funktionen. 

402
00:19:01,040 --> 00:19:04,800
Innerlich sind ich brauch hier 
gar nichts zu sagen, ja, kannst 

403
00:19:05,200 --> 00:19:08,240
auch mal weitermachen. 
OK, also das heißt, du bist 

404
00:19:08,320 --> 00:19:10,000
soweit schon noch mitgekommen. 
Das ist gut. 

405
00:19:10,240 --> 00:19:12,000
Ich, ich komm wie gesagt, ich 
komme mit. 

406
00:19:12,400 --> 00:19:14,520
Ja, du hast auch den Vorteil, 
weil du es im Kopf hast, glaub 

407
00:19:14,520 --> 00:19:18,160
ich, du siehst was ich erzähle, 
quasi in unserem als Logo Blog 

408
00:19:18,160 --> 00:19:20,760
quasi vor dir. 
Es ist ja genau wie wir es 

409
00:19:20,760 --> 00:19:23,800
anfangs gesagt haben, es ist ja 
nicht nur wahr für heisenwer, du

410
00:19:23,800 --> 00:19:27,080
erklärst ja hier quasi OOP noch 
mal oder Teile dessen auf jeden 

411
00:19:27,080 --> 00:19:29,360
Fall genau, von daher ist das 
total relevant für alle. 

412
00:19:29,440 --> 00:19:30,640
Ja, das ist richtig. 
Genau. 

413
00:19:30,640 --> 00:19:32,880
Noch noch sind wir gar nicht 
heisenwer, speziell das stimmt 

414
00:19:32,880 --> 00:19:34,840
ja, also ich fass noch mal 
zusammen, wir haben die 

415
00:19:34,840 --> 00:19:37,040
Konstruktorfunktion, die 
Destruktorfunktion, die 

416
00:19:37,040 --> 00:19:39,320
statische Funktion. 
Und dann haben wir ja die 

417
00:19:39,320 --> 00:19:41,840
Instanzfunktion. 
Diese 4 haben wir und müssen die

418
00:19:41,840 --> 00:19:45,040
auseinanderhalten, das tun wir 
auch in unserer Local Plattform 

419
00:19:45,120 --> 00:19:48,720
ne so und was haben jetzt 
Funktionen noch mal gemeinsam, 

420
00:19:48,720 --> 00:19:50,280
wo können wir jetzt weiter 
standardisieren? 

421
00:19:50,280 --> 00:19:53,840
Ne wenn wir uns Funktionen 
angucken ja also jede Funktion 

422
00:19:53,920 --> 00:19:58,640
hat keins 1 oder mehrere 
Argumente wie man so schön sagt,

423
00:19:59,040 --> 00:20:02,640
das sind quasi die 
Eingabeposition für die 

424
00:20:02,640 --> 00:20:05,160
Funktion. 
Ja das kann ich mir ausdenken 

425
00:20:05,160 --> 00:20:06,560
wenn ich ne Funktion schreibe, 
ja. 

426
00:20:07,080 --> 00:20:09,200
Zum Beispiel die Funktion, die 
ich gerade gesagt hab. 

427
00:20:09,200 --> 00:20:11,120
Die Static Funktion ist 
accessible. 

428
00:20:11,280 --> 00:20:14,160
Ist diese Hardware überhaupt 
sind die GPOI Pins überhaupt 

429
00:20:14,160 --> 00:20:16,960
grundsätzlich accessible? 
Die hat gar kein Argument. 

430
00:20:16,960 --> 00:20:19,680
Ja weil ich ich frag ist 
accessible Klammer auf Klammer 

431
00:20:19,680 --> 00:20:23,360
zu ich geb dir nichts mit ja und
da kommt schon n wert raus ja 

432
00:20:23,920 --> 00:20:27,080
wenn ich zum Beispiel sage 
create also als 

433
00:20:27,080 --> 00:20:30,000
Konstruktorfunktion jetzt eine 
Instanz von dem pin, dann würde 

434
00:20:30,000 --> 00:20:32,320
ich dir zum Beispiel mitgeben 
welchen pin denn welche Nummer 

435
00:20:32,320 --> 00:20:36,160
create und dann sag ich 26 ja 
weil ich pin 26 kreieren will. 

436
00:20:36,680 --> 00:20:40,400
Dann hat diese create Funktion 
genau ein Argument ja eines 

437
00:20:40,400 --> 00:20:44,000
bestimmten Datentyps, in diesem 
Falle 26 eine Nummer, ja ein 

438
00:20:44,000 --> 00:20:46,560
integer, ganz genau aber eine 
Number im im großen Sprecher. 

439
00:20:46,560 --> 00:20:50,400
Also führt mich zum zweiten 
Punkt, jede Funktion hat keine 1

440
00:20:50,400 --> 00:20:53,720
oder mehrere Argumente und jedes
Argument und das kann man auch 

441
00:20:53,720 --> 00:20:56,080
so sagen, muss von einem 
bestimmten Datentyp sein. 

442
00:20:56,080 --> 00:20:59,200
Von diesen Datentypen gibt es 
jetzt verschiedene. 

443
00:20:59,200 --> 00:21:01,360
Grundsätzlich wenn du dir jetzt 
alle Programmiersprachen 

444
00:21:01,360 --> 00:21:03,600
anguckst wirst du irre, dann 
haben wir wahrscheinlich ne 

445
00:21:03,600 --> 00:21:06,600
Liste von 70 Datentypen. 
Und hier muss man jetzt wieder 

446
00:21:06,600 --> 00:21:10,160
gucken, wie abstrahiere ich das,
um trotzdem alles machen zu 

447
00:21:10,160 --> 00:21:12,600
können. 
Ja, da haben, da hat uns Jason 

448
00:21:12,600 --> 00:21:14,520
was vorgemacht, da haben wir 
geshealt, da kommen wir nachher 

449
00:21:14,520 --> 00:21:16,960
noch drauf, aber man kommt 
zurecht, wenn man die Datentypen

450
00:21:16,960 --> 00:21:24,000
Wahrheitswert, Bulien, Textwert,
String Nummer number array, also

451
00:21:24,000 --> 00:21:27,360
Abfolgen von Elementen, die 
jetzt bulien, String oder number

452
00:21:27,360 --> 00:21:30,640
sein können oder array selber 
und Objekt. 

453
00:21:31,040 --> 00:21:33,040
Diese Key Value Sachen. 
Ja ich geh da nicht drauf ein. 

454
00:21:33,040 --> 00:21:35,400
Wir haben ne Folge wer wer noch 
mal genau gucken will wie das 

455
00:21:35,400 --> 00:21:37,840
alles so geht, möge sich die 
Folge über Jason zum Beispiel 

456
00:21:37,840 --> 00:21:40,480
anhören. 
So und wenn wir das haben, dann 

457
00:21:40,480 --> 00:21:41,600
sind wir schon mal wieder n 
Stück weiter. 

458
00:21:41,600 --> 00:21:44,120
Also wir haben verstanden wir 
haben Argumente die haben ne 

459
00:21:44,120 --> 00:21:47,200
Reihenfolge und die ist halt n 
Datentyp und jetzt muss man 

460
00:21:47,200 --> 00:21:50,960
einmal aufpassen jetzt gibt es 
einen besonderen Vogel als als 

461
00:21:50,960 --> 00:21:53,760
Datentyp, den muss man auch 
besonders behandeln und es gibt 

462
00:21:53,760 --> 00:21:57,200
nämlich ne Ausnahme. 
Es gibt tatsächlich den Datentyp

463
00:21:57,200 --> 00:21:59,840
in einem Argument der ist 
Funktion. 

464
00:22:00,760 --> 00:22:03,000
Ist jetzt n bisschen irre, ne 
Gerrit hat auch gerade die 

465
00:22:03,000 --> 00:22:06,560
Augenrauen zusammengezogen, das 
nennt sich dann Callback in der 

466
00:22:06,560 --> 00:22:09,160
in der Software und das muss man
auch wenn man Junior Entwickler 

467
00:22:09,160 --> 00:22:11,280
ist und das erste Mal sieht, das
muss man erst mal verdauen, das 

468
00:22:11,280 --> 00:22:13,720
ist nämlich das ist einfach, da 
kriegt man erst mal kurz ne 

469
00:22:13,720 --> 00:22:15,600
Blockade im Gehirn, was soll 
das? 

470
00:22:15,760 --> 00:22:19,920
Ich versuch das kurz zu. 
Erklären also, man kann quasi in

471
00:22:19,920 --> 00:22:23,760
eine Funktion eine andere 
Reingeben als Argument, die wird

472
00:22:23,760 --> 00:22:27,560
dann von der von der Funktion, 
die eigentlich ausführt mehr 

473
00:22:27,560 --> 00:22:29,520
oder weniger registriert 
gespeichert. 

474
00:22:30,320 --> 00:22:31,840
Und wenn dann irgendwie der 
Prozess. 

475
00:22:31,840 --> 00:22:34,880
Und meistens ist es gekoppelt an
der Instanz, wenn der meint, ich

476
00:22:34,880 --> 00:22:37,720
müsste jetzt irgendwie was 
benachrichtigen, dafür ist es 

477
00:22:37,720 --> 00:22:40,080
nämlich da, deswegen heißt es 
callback, ich ruf dich zurück, 

478
00:22:40,080 --> 00:22:42,640
ja dann kann halt diese 
Funktion, die hier reingegeben 

479
00:22:42,640 --> 00:22:46,240
werden, aufgerufen werden durch 
die Instanz als Seiteneffekt, 

480
00:22:46,240 --> 00:22:49,000
aber auch irgendwann, ja, es ist
nicht garantiert, dass das jetzt

481
00:22:49,000 --> 00:22:51,440
quasi aufgerufen wird, während 
die eigentliche Funktion läuft, 

482
00:22:51,600 --> 00:22:55,240
sondern irgendwann, ja, das muss
man einmal verstanden haben, 

483
00:22:55,240 --> 00:22:59,120
weil das ist wie Software 
Publish und Subscribe löst. 

484
00:22:59,680 --> 00:23:02,160
Wir haben ja auch in der 
Software die verschiedenen 

485
00:23:02,160 --> 00:23:04,880
Kommunikationspattern. 
Ja direktes Ausführen und n 

486
00:23:04,880 --> 00:23:07,400
Ergebnis erwarten und so weiter 
und ich kann aber auch in 

487
00:23:07,400 --> 00:23:10,440
Software sagen Alter gib mir 
halt mal ne Nachricht wenn 

488
00:23:10,440 --> 00:23:13,200
irgendwas passiert ist. 
Ja also wir kennen das aus dem 

489
00:23:13,200 --> 00:23:16,200
Leben, für weiß ich nicht, ich 
nehm noch mal das Beispiel GPIO 

490
00:23:16,200 --> 00:23:18,480
pin was wir gerade hatten. 
Ja da will ich vielleicht gar 

491
00:23:18,480 --> 00:23:20,800
nicht immer fragen, was ist denn
der Wert Grad am pin sondern ich

492
00:23:20,800 --> 00:23:24,800
will ne Nachricht bekommen wenn 
das 1 ist oder irgend so was 

493
00:23:24,800 --> 00:23:26,800
oder wenn es sich ändert zum 
Beispiel ja on change ja. 

494
00:23:28,320 --> 00:23:31,040
So und in der in der Software 
Low Level würde man jetzt quasi 

495
00:23:31,040 --> 00:23:34,280
typischerweise eine Funktion 
machen, die einen als Argument, 

496
00:23:34,280 --> 00:23:37,480
eine andere Funktion erwartet, 
die ich dann aufrufen kann, der 

497
00:23:37,480 --> 00:23:39,440
ich dann sage, jetzt hat sich es
geändert auf 1. 

498
00:23:40,480 --> 00:23:43,440
Das glaube ich war n bisschen 
komplex, aber jetzt haben wir 

499
00:23:43,440 --> 00:23:45,320
dann verstanden, wir haben die 
Argumente, die verschiedenen 

500
00:23:45,320 --> 00:23:47,760
Datentypen und diesen einen 
speziellen der quasi n callback 

501
00:23:47,760 --> 00:23:49,920
ist und den haben wir auch bei 
uns in der in der Local 

502
00:23:49,920 --> 00:23:51,800
Plattform. 
Und da wird gar nicht so viel 

503
00:23:51,800 --> 00:23:53,560
Brimborium gemacht. 
Das sieht spezieller aus, weil 

504
00:23:53,560 --> 00:23:55,960
das sieht aus, wieso n Output 
und da da taucht dann einfach 

505
00:23:55,960 --> 00:23:59,960
der Wert auf, der zurückgegeben 
wird, irgendwann nachdem quasi 

506
00:23:59,960 --> 00:24:01,360
dieser Callback registriert 
wurde. 

507
00:24:01,360 --> 00:24:03,600
Ja, das ist aber was was was 
immer so n bisschen 

508
00:24:03,600 --> 00:24:05,320
Schwierigkeiten bereitet beim 
Nachdenken. 

509
00:24:06,160 --> 00:24:09,120
Ich würde fast sagen, wir müssen
es fast eher Visual Coding 

510
00:24:09,120 --> 00:24:10,720
Plattform oder sowas nennen. 
Ja weil. 

511
00:24:11,120 --> 00:24:12,400
Ja. 
Im Grunde genommen ist es 

512
00:24:12,400 --> 00:24:15,200
Coding, nur du kannst es halt 
jederzeit sehen und du weißt 

513
00:24:15,200 --> 00:24:18,800
genau was da passiert, das 
stimmt oder Visual Development 

514
00:24:18,800 --> 00:24:21,840
oder wie auch immer. 
Ist so wichtig, aber ne um das 

515
00:24:21,840 --> 00:24:23,920
noch mal zu übertragen auf das 
was da eigentlich bei uns 

516
00:24:23,920 --> 00:24:25,760
passiert. 
Wir machen kurz das Intermetro 

517
00:24:25,760 --> 00:24:27,360
Gerrit weil das ist nämlich n 
cooler Einwand. 

518
00:24:27,360 --> 00:24:29,640
Es gibt es gibt tatsächlich 
Visual Programming und da müssen

519
00:24:29,640 --> 00:24:33,040
wir uns aber auch n bisschen von
separieren, weil jetzt kommt es 

520
00:24:33,040 --> 00:24:37,000
drauf an ob du versuchst das was
in der Funktions in dem 

521
00:24:37,000 --> 00:24:39,920
Funktionskern man sagt auch in 
der im Funktionsblock quasi 

522
00:24:39,920 --> 00:24:43,760
implementiert ist, zu coden, 
also ob du den Inhalt einer 

523
00:24:43,760 --> 00:24:48,400
Funktion locoden möchtest oder 
ob du nur das Ausführen von 

524
00:24:48,400 --> 00:24:51,280
Funktionen locoden möchtest. 
Ist n großer Unterschied 

525
00:24:51,280 --> 00:24:52,560
zwischen unserer Plattform und 
anderen. 

526
00:24:52,560 --> 00:24:54,320
Es gibt nämlich ganz viel 
Plattform, die kennt ihr ja auch

527
00:24:54,320 --> 00:24:57,320
als Nutzer, wo man so ne Art 
flussdiagramme macht, wo man 

528
00:24:57,320 --> 00:25:00,600
dann auch IF Else Konditionen 
hat und so weiter und jetzt ist 

529
00:25:00,600 --> 00:25:04,000
man eher dabei, quasi den Inhalt
einer Funktion zu definieren und

530
00:25:04,000 --> 00:25:08,400
grafisch zu programmieren, das 
machen wir genau nicht, sondern 

531
00:25:08,400 --> 00:25:11,200
wir nehmen fertige Funktionen, 
die schon fertig implementiert 

532
00:25:11,200 --> 00:25:13,800
wurden von irgendjemanden mit 
viel Know How, nämlich genau 

533
00:25:13,800 --> 00:25:15,280
diese Open Source Dinger ist 
alles cool. 

534
00:25:15,280 --> 00:25:18,080
Ja und was wir nur noch machen 
und das ist nämlich n 

535
00:25:18,080 --> 00:25:21,040
Abstraktionslevel höher. 
Wir gucken uns diese Funktion an

536
00:25:21,040 --> 00:25:23,920
und können die Argumente 
konfigurieren und mit n 

537
00:25:23,920 --> 00:25:26,000
rückgabewerten Art arbeiten. 
Mach ich gleich weiter. 

538
00:25:26,480 --> 00:25:28,960
Wir versuchen aber nicht quasi 
selber ne Funktion zu bauen auf 

539
00:25:28,960 --> 00:25:30,800
dem Level. 
Ja da sind wir ein Stück höher 

540
00:25:30,800 --> 00:25:33,760
um das mal ganz klar, es passte 
gerade so schön ne auf der Spur 

541
00:25:33,760 --> 00:25:38,120
zu sagen also es ist ne Art 
Visual Coating ja aber wir coden

542
00:25:38,120 --> 00:25:40,960
nicht Inhalte von Funktionen, 
sondern wir wir coden indem wir 

543
00:25:40,960 --> 00:25:43,200
Funktionen aneinanderkabeln und 
aufrufen ne. 

544
00:25:43,840 --> 00:25:45,840
Gut, dann machen wir weiter was.
Wir hatten jetzt gesagt, die 

545
00:25:45,840 --> 00:25:48,240
Argumente ist, das ist ne 
Einheitlichkeit bei Funktionen 

546
00:25:48,240 --> 00:25:50,640
und was ist noch Standard ist 
Funktion kann man immer 

547
00:25:50,640 --> 00:25:54,480
ausführen, das ist auch wichtig,
dabei werden dann die Argumente 

548
00:25:54,560 --> 00:25:57,680
die ich reingegeben hab 
verarbeitet und in der Funktion 

549
00:25:57,680 --> 00:26:00,240
je nachdem was da halt drinne 
passiert entstehen 

550
00:26:00,240 --> 00:26:03,000
Seiteneffekte, das ist dann halt
dokumentiert, muss man halt 

551
00:26:03,000 --> 00:26:04,640
gucken was macht der hat zum 
Beispiel ne Verbindung mit 

552
00:26:04,640 --> 00:26:07,040
aufgebaut zu einem TCP Server 
oder irgendwas ja wenn es 

553
00:26:07,040 --> 00:26:09,760
connected ja das sind halt quasi
seiteneffekte die ausgeführt 

554
00:26:09,760 --> 00:26:13,520
werden und. 
Ich kriege eigentlich immer nen 

555
00:26:13,520 --> 00:26:15,200
Rückgabewert zurück. 
Das ist auch wichtig. 

556
00:26:15,200 --> 00:26:18,400
Ja, also ich pack was rein, ich 
führ es aus und ich bekomme was 

557
00:26:18,400 --> 00:26:21,800
zurück. 
Ja Punkt so ist es ja und der 

558
00:26:21,800 --> 00:26:24,480
Rückgabewert ist halt auch 
wieder nen Datentyp. 

559
00:26:24,840 --> 00:26:27,840
Man kann sich vorstellen wie ein
einziges Argument, ein einziger 

560
00:26:27,840 --> 00:26:31,760
Rückgabewert exakt wieder von 
den von den Sorten Bulien 

561
00:26:32,240 --> 00:26:36,640
Number, String Array oder Object
so einfach so gut, ja und jetzt 

562
00:26:36,640 --> 00:26:40,400
Achtung hier gibt es jetzt in 
dem Falle 2 spezialkollegen 2 

563
00:26:40,400 --> 00:26:42,840
sonderbare. 
Kollegen, die da neben den 

564
00:26:42,840 --> 00:26:46,400
normalen Vorkommen können. 
Und das ist, wenn man sich jetzt

565
00:26:46,400 --> 00:26:51,360
ganz abstrakt betrachtet, eine 
Instanz selber als rückgabewert.

566
00:26:52,240 --> 00:26:54,760
Gerrit Jetzt quizfrage fies, 
aber ich glaube du hast es 

567
00:26:54,760 --> 00:26:56,520
drauf, ich glaub in seinen Augen
seh ich, dass du, dass du 

568
00:26:56,520 --> 00:26:59,760
verstehst, welche Funktion wird 
vielleicht wohl ne Instanz als 

569
00:26:59,760 --> 00:27:02,160
Rückgabewert haben von den 4 die
ich habe. 

570
00:27:02,640 --> 00:27:06,400
Vermutlich der Konstruktor. 
Ja, ganz genau und auch nur 

571
00:27:06,400 --> 00:27:08,960
deswegen qualifiziert es den als
Kategorie für sich. 

572
00:27:08,960 --> 00:27:11,360
Ja, weil die ist sehr speziell, 
weil der Konstruktor. 

573
00:27:11,680 --> 00:27:14,880
Hat zwar Argumente ganz normal, 
aber der Rückgabewert ist quasi 

574
00:27:14,880 --> 00:27:18,920
ne Instanz, also ein Zeiger auf 
eine neu geschaffene Instanz 

575
00:27:18,920 --> 00:27:21,200
einer Klasse. 
Ja und genau den muss man 

576
00:27:21,200 --> 00:27:23,040
speziell behandeln, das ist ein 
spezieller Kollege, bei uns 

577
00:27:23,040 --> 00:27:25,440
sieht man quasi die Instanz, das
ist schön, wenn man bei uns auch

578
00:27:25,440 --> 00:27:27,640
die Instanz sehen und halten 
kann, ne die wird quasi 

579
00:27:27,640 --> 00:27:30,160
angezeigt als Punkt. 
Normalerweise sieht man die 

580
00:27:30,160 --> 00:27:32,880
nicht, die existiert nur im RAM.
Wenn wenn ne Software läuft ja 

581
00:27:32,880 --> 00:27:35,000
aber bei uns kann man die halt 
sehen, man kann sehen welche 

582
00:27:35,000 --> 00:27:37,360
Funktionen sind da, man kann 
auch die Konfiguration der 

583
00:27:37,360 --> 00:27:39,040
Instanz auslesen indem man die 
Funktion darauf. 

584
00:27:39,280 --> 00:27:41,600
Aufruft und halt auch die 
Rückgabewerte sich visualisiert 

585
00:27:41,600 --> 00:27:43,800
und anschaut. 
Ja, normalerweise kann man das 

586
00:27:43,800 --> 00:27:45,600
halt einfach nicht n Code wir 
können, wir haben quasi ein 

587
00:27:45,600 --> 00:27:48,800
Fenster in den in diesen in 
diese Blackbox von Code 

588
00:27:48,960 --> 00:27:50,640
geschaffen, wenn man so will, 
ja. 

589
00:27:51,040 --> 00:27:53,280
Ja, und vielleicht zur 
Orientierung, wie das bei uns 

590
00:27:53,280 --> 00:27:56,080
aussieht. 
Das ist wieso n baumdiagramm 

591
00:27:56,080 --> 00:27:58,640
glaub ich sagt man ne, also wir 
haben auf der obersten Ebene die

592
00:27:58,640 --> 00:28:02,640
die Klasse meinetwegen MQTT 
Client oder so und da drinne 

593
00:28:02,640 --> 00:28:06,720
haben wir dann den Konstruktor 
und den D struktor also created 

594
00:28:06,720 --> 00:28:09,320
lead. 
Und da drunter existieren dann 

595
00:28:09,320 --> 00:28:11,720
die jeweiligen Instanzen, die 
schon geschaffen sind oder die 

596
00:28:11,720 --> 00:28:13,240
gerade vorhanden sind. 
Und die kann man wieder 

597
00:28:13,240 --> 00:28:15,840
ausklappen und da drin sind die 
ganzen Instanzfunktionen oder 

598
00:28:15,840 --> 00:28:17,120
memberfunktionen ne. 
Richtig. 

599
00:28:17,120 --> 00:28:19,120
Und die statischen Funktionen, 
die hängen direkt unter der 

600
00:28:19,120 --> 00:28:21,920
Klasse, weil die nämlich 
klassenkontext haben. 

601
00:28:21,920 --> 00:28:23,800
Ne das weil die kannst du ja 
ausrufen, ohne dass du ne 

602
00:28:23,800 --> 00:28:26,720
Instanz brauchst. 
Ja und dann gibt es alle 

603
00:28:26,720 --> 00:28:28,440
Mischungen von denen es gibt, 
manche Klassen, die haben nur 

604
00:28:28,440 --> 00:28:30,400
statische Funktionen, es gibt 
Klassen, die haben gar keine 

605
00:28:30,400 --> 00:28:33,440
statische Funktion und haben nur
instanzfunktionen und und und. 

606
00:28:33,440 --> 00:28:35,440
Aber das ist egal, weil Gerrit 
sagt genau richtig. 

607
00:28:35,840 --> 00:28:37,840
Kann man halt ausklappen und man
sieht dann schon was los ist. 

608
00:28:38,640 --> 00:28:41,600
So, jetzt hatte ich gesagt, es 
gibt 2 sonderbare Rückgabewerte,

609
00:28:41,640 --> 00:28:45,120
bei dem Rückgaben und das zweite
ist der ist sehr sonderbar und 

610
00:28:45,120 --> 00:28:48,480
den gibt es schon nicht immer. 
Das ist aber im modernen Webwelt

611
00:28:48,480 --> 00:28:50,560
sehr sehr wichtig. 
Es gibt den Rückgabewert 

612
00:28:50,560 --> 00:28:54,640
Versprechen, der heißt in 
Englisch Promis und da muss ich 

613
00:28:54,640 --> 00:28:57,600
irgend n ganz bisschen erklären,
das ist normaler und das hat was

614
00:28:57,600 --> 00:29:01,200
mit der Asynchronität zu tun von
Funktionen ja, ganz oft ist es 

615
00:29:01,200 --> 00:29:04,240
so, dass wir Funktionen haben, 
die ne Weile brauchen um das zu 

616
00:29:04,240 --> 00:29:07,440
tun was sie tun sollen. 
Das klassische immer Beispiel 

617
00:29:07,440 --> 00:29:11,600
ist SQL Anfrage zum Beispiel. 
Ja du sagst Halt, hol mir aus 

618
00:29:11,600 --> 00:29:13,040
der Datenbank dies und jenes 
raus. 

619
00:29:13,040 --> 00:29:16,160
Ja und das kann halt dauern, je 
nachdem wie groß die Datenbank 

620
00:29:16,160 --> 00:29:19,040
ist und je nachdem was du da 
rausholen möchtest und so ja es 

621
00:29:19,040 --> 00:29:21,440
kann dauern, kann halt auch 
schon ne Millisekunde schon lang

622
00:29:21,440 --> 00:29:25,760
ja für Software und wenn man 
nicht möchte, dass man wenn man 

623
00:29:25,760 --> 00:29:28,320
weiß, dass die Funktion etwas 
länger dauert, dann möchtest du 

624
00:29:28,320 --> 00:29:30,720
nicht, dann möchtest du nicht 
den Rückgabewert. 

625
00:29:31,200 --> 00:29:33,920
Also du möchtest nicht warten 
bis die fertig ist und alles 

626
00:29:33,920 --> 00:29:35,520
anhalten dann ist das ist jetzt 
wichtig. 

627
00:29:35,520 --> 00:29:39,600
Normalerweise laufen Funktionen 
der Reihe nach, also wenn du 

628
00:29:39,600 --> 00:29:42,480
wenn du im synchronen ne das hat
asynchron und synchron und in 

629
00:29:42,480 --> 00:29:46,640
einer synchronen Welt bist 
laufen Funktionen immer seriell 

630
00:29:46,640 --> 00:29:49,120
immer nacheinander. 
Ja du kannst die zwar verketten 

631
00:29:49,120 --> 00:29:51,920
und die kann auch automatisch 
dich aufrufen und so weiter aber

632
00:29:51,920 --> 00:29:54,400
das passiert in einer 
dedizierten Reihenfolge, nämlich

633
00:29:54,400 --> 00:29:56,960
nacheinander. 
Wenn wir synchron programmieren 

634
00:29:56,960 --> 00:29:59,520
würden wollen in in der Webwelt,
wenn wir da wäre vorbei. 

635
00:29:59,520 --> 00:30:00,960
Ja, da kannst du kein Internet 
machen. 

636
00:30:00,960 --> 00:30:02,600
Ja, also das ist alles 
gleichzeitig, du hast ganz viele

637
00:30:02,600 --> 00:30:04,400
Nutzerklicks und sowas, das 
heißt, alles ist im Prinzip 

638
00:30:04,400 --> 00:30:07,120
asynchron, was heißt das, 
Funktionen können potenziell 

639
00:30:07,600 --> 00:30:10,240
gleichzeitig laufen und man 
wartet nicht mehr bis irgendwas 

640
00:30:10,240 --> 00:30:12,800
fertig ist. 
Ja man muss aber wissen wann es 

641
00:30:12,800 --> 00:30:15,440
fertig ist, damit man weiß, ich 
muss ja irgendwann mal den Wert 

642
00:30:15,440 --> 00:30:18,000
in die Hand nehmen, ich will das
haben, was aus der Datenbank hat

643
00:30:18,000 --> 00:30:20,160
oder ich will den Fehler in die 
Hand haben können, ja wenn es 

644
00:30:20,160 --> 00:30:22,400
nicht geklappt hat und dann 
kriegt man ein Versprechen 

645
00:30:22,400 --> 00:30:25,720
zurück und das Versprechen ist 
ja, du hast die Funktion 

646
00:30:25,720 --> 00:30:29,520
ausgeführt, ist cool ja hier und
ich geb dir als Rückgabewert n 

647
00:30:29,520 --> 00:30:33,520
versprechen in die Hand das sich
auflösen wird, entweder in den 

648
00:30:33,840 --> 00:30:36,160
in das Ergebnis was du 
eigentlich erwartest oder in 

649
00:30:36,160 --> 00:30:39,120
einen Fehler, weil ich es nicht 
konnte, aber zu irgendeiner Zeit

650
00:30:39,120 --> 00:30:43,000
in der Zukunft und jetzt will 
ich nicht rumdüdeln an das das 

651
00:30:43,000 --> 00:30:45,480
ist das sehr, das ist das 
komplexeste Thema und die 

652
00:30:45,480 --> 00:30:47,640
schwierigste Schwierigkeit für 
unseren digitalen 

653
00:30:47,640 --> 00:30:52,320
Funktionszwilling weil diese 
Asynchronizität ist sehr krass 

654
00:30:52,320 --> 00:30:54,320
unterschiedlich organisiert in 
den verschiedenen 

655
00:30:54,320 --> 00:30:57,600
Programmiersprachen, ne sehr 
schön organisiert, zum Beispiel 

656
00:30:57,600 --> 00:31:00,440
in in in Javascript mit Asyncle 
Wait ganz modern ne. 

657
00:31:00,440 --> 00:31:03,560
Also das kann auch C. 
Sharp nicht so schön organisiert

658
00:31:03,560 --> 00:31:06,640
in C plus plus so na ja wie auch
immer haben es wir aber 

659
00:31:06,640 --> 00:31:09,040
geschafft Architekturell und da 
sprech ich jetzt, das ist 

660
00:31:09,040 --> 00:31:12,880
Detailkrams vom VRBC Protokoll, 
das löst das, aber wir können 

661
00:31:12,880 --> 00:31:16,000
quasi auch standardmäßig mit 
solchen Versprechen umgehen. 

662
00:31:16,400 --> 00:31:18,600
Und in unser UI, das merkt man 
gar nicht, wird einfach 

663
00:31:18,600 --> 00:31:20,240
ordentlich gewartet und 
irgendwann löst sich das 

664
00:31:20,240 --> 00:31:23,440
Versprechen auf und das ist n 
großer Unterschied dazu, dass ne

665
00:31:23,440 --> 00:31:26,560
Funktion ne lang ausführt. 
Ja das Gerrit, Du kennst das, 

666
00:31:26,880 --> 00:31:28,960
vielleicht war dir das nicht so 
klar, aber ich sag das mal, 

667
00:31:29,360 --> 00:31:33,440
manchmal führt ne Funktion lange
aus und dann wird ja der der der

668
00:31:33,440 --> 00:31:36,480
wir haben so ne LED quasi an der
Funktion, die ist normalerweise 

669
00:31:36,480 --> 00:31:38,560
grün wenn es wenn es der gut 
geht der Funktion wenn du die 

670
00:31:38,560 --> 00:31:40,240
aber klickst und die braucht 
lange und dann wird die 

671
00:31:40,240 --> 00:31:44,160
irgendwann blau ich glaub noch 2
Sekunden ja die wird aber nur 

672
00:31:44,160 --> 00:31:46,400
blau. 
Wenn die tatsächlich lange 

673
00:31:46,400 --> 00:31:48,920
ausführt und der Rückgabewert 
nicht kommt, wenn die n 

674
00:31:48,920 --> 00:31:50,520
versprechen geliefert hat, dann 
ist die gleich. 

675
00:31:50,520 --> 00:31:52,560
Wieder ist die Grünen, dann kann
das aber trotzdem, dann kann das

676
00:31:52,560 --> 00:31:54,640
5 oder 10 Sekunden dauern, dann 
kommt der Halt irgendwann der 

677
00:31:54,640 --> 00:31:57,840
Wert, ja das ist nämlich das 
genau das Ding bei der 

678
00:31:57,840 --> 00:32:00,640
Asynchronizität sagst du OK ich 
hab ich hab n versprechen 

679
00:32:00,640 --> 00:32:02,600
gekriegt, das hat also die 
Funktion hat schon mitgekriegt, 

680
00:32:02,600 --> 00:32:04,320
dass ich das haben will und 
irgendwann löst sich das schon 

681
00:32:04,320 --> 00:32:05,840
auf. 
Ja das ist der Punkt. 

682
00:32:06,560 --> 00:32:08,480
So, und jetzt sind wir fast 
fertig mit der standardisierten 

683
00:32:08,480 --> 00:32:09,640
Funktion. 
Jetzt ist es so, dass ich jetzt,

684
00:32:09,640 --> 00:32:11,280
hab ich gesagt, immer 
rückgabewert gibt n Rückgabewert

685
00:32:11,280 --> 00:32:14,000
gibt n rückgabewert stimmt 
nicht, klassischerweise kann ne 

686
00:32:14,000 --> 00:32:16,320
Funktion auch keinen 
Rückgabewert geben und dann muss

687
00:32:16,320 --> 00:32:18,600
sie einen Fehler schmeißen und 
das ist schon wieder n kleinstes

688
00:32:18,600 --> 00:32:20,400
gemeinsames Vielfache. 
Das ist in allen 

689
00:32:20,520 --> 00:32:22,960
Programmiertechnologien so ja 
also wenn kein Rückgabewert 

690
00:32:22,960 --> 00:32:26,440
kommen kann, weil es kann 
passieren ich ich ich sag zum 

691
00:32:26,440 --> 00:32:29,280
Beispiel lies Pfeil XY aber 
Pfeil XY gibt es einfach 

692
00:32:29,280 --> 00:32:31,880
verdammt noch mal nicht auf der 
Platte ja nein dann kann ich ja 

693
00:32:31,880 --> 00:32:35,240
den Rückgabewert nicht haben auf
dem Pfeilhändel ja das macht ja 

694
00:32:35,240 --> 00:32:37,840
keinen Sinn, ja. 
Also bekommt man einen Fehler. 

695
00:32:37,920 --> 00:32:40,800
Ja und der Fehler ist halt quasi
der ja, das ist halt der 

696
00:32:40,800 --> 00:32:42,920
fehlerpfad Funktion konnte nicht
ausgeführt werden und so n 

697
00:32:42,920 --> 00:32:46,040
Fehler hat immer ne Information 
was ist warum ja warum hat es 

698
00:32:46,040 --> 00:32:49,320
nicht funktioniert ja in in in 
der Informatik spricht man auch 

699
00:32:49,320 --> 00:32:52,400
Exception ja so also das muss 
man quasi auch noch können im 

700
00:32:52,400 --> 00:32:54,800
digitalen Zwilling grundsätzlich
exceptions zu fangen. 

701
00:32:54,800 --> 00:32:58,760
Ja und dann gibt es als letztes 
gemeinsames Vielfaches hat ne 

702
00:32:58,760 --> 00:33:02,840
Funktion muss nicht aber hat zu 
haben würde ich sagen ne 

703
00:33:02,840 --> 00:33:05,960
Dokumentation ne. 
Also tatsächlich ist es so, dass

704
00:33:05,960 --> 00:33:08,520
im Source Code, das kennen alle,
die n bisschen Code schon mal 

705
00:33:08,520 --> 00:33:10,280
geschrieben haben, die sie es 
nicht kennen, den sag ich jetzt 

706
00:33:10,280 --> 00:33:12,520
so, man schreibt halt nicht nur 
den Quelltext hin, sondern 

707
00:33:12,520 --> 00:33:15,160
typischerweise schreibt man halt
mit irgendwie was weiß ich noch 

708
00:33:15,160 --> 00:33:18,000
mal so 2 schräge Striche oder 
mal n Raute oder Irgendsowas 

709
00:33:18,000 --> 00:33:20,440
gibt je nach Programmiersprache 
quasi n Zeichen dafür, dass ich 

710
00:33:20,440 --> 00:33:23,680
jetzt n Kommentar schreibe, ja 
und dass du sogar das ist noch 

711
00:33:23,680 --> 00:33:25,640
besser organisiert, wenn du 
ordentlichen Code schreibst, 

712
00:33:25,640 --> 00:33:28,320
dann gibt es bestimmte Arten und
weisen, das sind quasi Policies 

713
00:33:28,320 --> 00:33:30,600
wie du diese Kommentare zu 
schreiben hast, nämlich zum 

714
00:33:30,600 --> 00:33:33,040
Beispiel als JS Stock, das ist n
ganz klassisches Ding. 

715
00:33:33,680 --> 00:33:37,640
Und da beschreibst du quasi, was
deine Funktion ist, was die 

716
00:33:37,640 --> 00:33:41,080
Macht und welche Argumente sie 
erwartet und von welchem 

717
00:33:41,080 --> 00:33:43,600
Datentyp die Argumente sind und 
so weiter ja, zum Beispiel 

718
00:33:43,760 --> 00:33:46,800
Funktion Connect zu einer 
Datenbank, da könntest du eine 

719
00:33:46,800 --> 00:33:50,080
ein Argument haben, wo du sagst 
welchen Dialekt denn ja Post 

720
00:33:50,080 --> 00:33:53,280
crease I Sequel und so weiter 
das musst du dann da eingeben. 

721
00:33:53,280 --> 00:33:56,400
Ja und dann würde quasi in der 
Dokumentation stehen Pass auf, 

722
00:33:56,400 --> 00:33:59,440
hier musst du als dringend 
eingeben den Dialekt und 

723
00:33:59,440 --> 00:34:01,440
übrigens hast du zur Auswahl 
nur. 

724
00:34:01,920 --> 00:34:05,840
My Secret Postgress Maria DB und
was weiß ich, schieß mich tot. 

725
00:34:05,840 --> 00:34:09,280
Ja, und das ist guter Ton, dass 
man sowas macht für die, für 

726
00:34:09,280 --> 00:34:11,440
die, für die Funktion, die ja 
auch benutzt werden dürfen nach 

727
00:34:11,440 --> 00:34:14,120
außen ne, und jetzt kann man 
sich schon vorstellen, mit 

728
00:34:14,120 --> 00:34:17,520
diesem guten Ton kann man sehr 
viel machen, wenn man das jetzt 

729
00:34:17,520 --> 00:34:21,040
auch visualisiert, ja weil wir 
haben quasi eine Dokumentation 

730
00:34:21,239 --> 00:34:23,800
at the Single Source of Truth 
direkt bei der Funktion, ja und 

731
00:34:23,800 --> 00:34:25,120
wenn wir die abholen, das tun 
wir. 

732
00:34:25,639 --> 00:34:28,000
Direkt aus dem Code mit der 
Dokumentation. 

733
00:34:28,040 --> 00:34:31,199
Dann ist alles klar und der User
weiß auch, sonst wisst ihr das 

734
00:34:31,199 --> 00:34:33,639
nämlich nicht, müsste man das 
Raten vom Funktionsnamen ja, 

735
00:34:33,639 --> 00:34:36,800
jetzt weiß der User aber ah in 
Argument 1 muss ich wohl 

736
00:34:36,800 --> 00:34:39,120
irgendwie den Dialekt von der 
scheiß Datenbank eingeben ne und

737
00:34:39,600 --> 00:34:41,560
wenn das sogar so genau 
geschrieben ist, dass man dass 

738
00:34:41,560 --> 00:34:43,199
da drin steht My SQL und so 
weiter und sofort, dann kann man

739
00:34:43,199 --> 00:34:44,800
sich auch vorstellen, kann ich 
mir im Web auch n dropdown 

740
00:34:44,800 --> 00:34:46,400
zusammenbauen, dynamisch 
hochgenerisch ja. 

741
00:34:48,639 --> 00:34:50,560
Das machen wir auch, sind wir 
vorweg. 

742
00:34:50,560 --> 00:34:53,040
Wir bauen quasi aus der 
Dokumentation, die wir scannen, 

743
00:34:53,040 --> 00:34:54,800
aus diesen ganz verschiedenen 
Technologien, und Python wird 

744
00:34:54,800 --> 00:34:56,840
zum Beispiel ganz anders 
dokumentiert, da ist die 

745
00:34:56,840 --> 00:34:59,200
Funktionsdokumentation Teil der 
Programmiersprache, das ist 

746
00:34:59,200 --> 00:35:02,880
richtig cool an der Stelle, das 
ist der Here Text, aber das ist 

747
00:35:02,880 --> 00:35:05,520
auch egal, das machen wir, ist 
unsere, das ist quasi das, was 

748
00:35:05,520 --> 00:35:08,160
wir gearbeitet haben an 
Software, wir vereinheitlichen 

749
00:35:08,160 --> 00:35:11,000
das und Ende des Tages wird da 
so n jsons Schema sogar 

750
00:35:11,000 --> 00:35:15,760
rausgebaut, das ist wieder ne ne
Standard Web Datenstruktur ist 

751
00:35:15,760 --> 00:35:18,400
normiert ist n Standard. 
Und dann gibt es, weil es n 

752
00:35:18,400 --> 00:35:21,640
Standard ist, Tools, die können 
halt aus dem Json scemer, das 

753
00:35:21,640 --> 00:35:24,200
ist Scemer ist in der Anleitung 
was kann ich konfigurieren, die 

754
00:35:24,200 --> 00:35:28,000
bauen dir daraus ne webform 
dynamisch n dropdown und alles 

755
00:35:28,000 --> 00:35:30,680
ja das passiert bei uns und 
deswegen kann man jetzt in der 

756
00:35:30,680 --> 00:35:33,760
letzten Version 89 kann man 
einfach weil so n Argument auf n

757
00:35:33,760 --> 00:35:37,680
Knopf drücken, man bekommt quasi
eine eine automatisch generierte

758
00:35:37,680 --> 00:35:40,800
Form die sich tatsächlich 
automatisch aus der 

759
00:35:40,800 --> 00:35:44,320
Dokumentation der Funktion die 
irgendwo lag ingeneriert hat. 

760
00:35:44,320 --> 00:35:45,920
Ja und das ist eigentlich ganz 
cool. 

761
00:35:46,360 --> 00:35:47,560
Weil dann wird es halt richtig 
nutzbar. 

762
00:35:47,560 --> 00:35:48,960
Ja, dann kann ich die einfach 
aufrufen. 

763
00:35:49,920 --> 00:35:51,920
Ja, mega cool. 
Das gilt für alle, die 

764
00:35:52,160 --> 00:35:55,200
Funktionen, die sag ich mal, in 
den originalen Open Source 

765
00:35:55,200 --> 00:35:58,320
Libraries gut dokumentiert sind 
oder in denen, die du vielleicht

766
00:35:58,320 --> 00:36:00,040
selber gebaut hast oder n 
anderer Entwickler bei uns im 

767
00:36:00,040 --> 00:36:02,480
Team oder so, das gibt es ja 
durchaus auch denk ich mal ne ja

768
00:36:02,720 --> 00:36:05,760
und was ist wenn nicht? 
Ja, dann steht da nichts. 

769
00:36:05,760 --> 00:36:10,120
Ja dann OK, ja ist schwieriger 
und dann haben wir ja immer noch

770
00:36:10,120 --> 00:36:11,920
unsere Dokumentation dox Punkt, 
da heißen wir. 

771
00:36:12,160 --> 00:36:14,640
Nee, Spaß beiseite. 
Also wenn wir, wenn wir von 

772
00:36:14,640 --> 00:36:18,000
Heisenberg quasi unsere 
eingebauten Module haben, und es

773
00:36:18,000 --> 00:36:20,360
gibt keine gute Dokumentation 
oder sie ist wild oder 

774
00:36:20,360 --> 00:36:23,360
irgendsowas oder ich will gar 
nicht alles exposen, sag ich 

775
00:36:23,360 --> 00:36:26,760
mal, dann schreibe ich meistens 
ne ganz dünne Schicht drüber. 

776
00:36:26,760 --> 00:36:29,200
Das ist aber auch n Klassiker. 
Also ich hab am Anfang gesagt, 

777
00:36:29,200 --> 00:36:31,680
wir wollen nicht so viel Action 
haben, aber dann dann schreibe 

778
00:36:31,680 --> 00:36:34,160
ich halt einfach nur einen 
Rapper, wo ich quasi die 

779
00:36:34,160 --> 00:36:37,160
Funktion des Open Source 
Bibliothek einfach noch mal 

780
00:36:37,160 --> 00:36:40,720
rappe, da hat quasi jede 
Funktion einen einzigen Buddy. 

781
00:36:40,960 --> 00:36:43,760
Und zwar den Aufruf der Open 
Source Funktion und ich mach das

782
00:36:43,760 --> 00:36:47,000
eigentlich nur um ne saubere 
Dokumentation dran zu kleben. 

783
00:36:47,000 --> 00:36:50,160
Ja, ich adaptiere quasi die Open
Source Funktion und schreib dann

784
00:36:50,160 --> 00:36:53,080
oft sehr sauberen Days Dock 
Kommentar, damit unsere Nutzer 

785
00:36:53,080 --> 00:36:56,320
verstehen was da los ist. 
Ja genau also das mach ich da an

786
00:36:56,320 --> 00:36:58,800
der Stelle, weil ich auch nicht 
später irgendwo das einfügen 

787
00:36:58,800 --> 00:37:01,520
will, das ist dann die Arbeit 
die wir machen müssen, wenn wenn

788
00:37:01,520 --> 00:37:03,840
die Open Source Bibliothek das 
das mach ich aber tatsächlich 

789
00:37:03,840 --> 00:37:05,760
meistens um das schön zu 
strukturieren damit alles 

790
00:37:05,760 --> 00:37:07,680
einheitlich ist. 
Ja wäre aber nicht unbedingt 

791
00:37:07,680 --> 00:37:10,000
notwendig, ja wenn das schon von
vornherein da ist. 

792
00:37:10,520 --> 00:37:13,120
Und all das, was du jetzt sagst.
Deshalb sind wir extrem schnell 

793
00:37:13,120 --> 00:37:16,640
oder oder relativ schnell. 
Neue Konnektoren zum Beispiel 

794
00:37:16,640 --> 00:37:20,120
oder sowas einfach in die heißen
Wir aufzunehmen, wollen wir es 

795
00:37:20,120 --> 00:37:22,880
einfach dranhängen und und das 
so benutzen, wie es da ist. 

796
00:37:23,200 --> 00:37:26,680
Von der Funktion selber bis hin 
zum Kommentar der Funktion oder 

797
00:37:26,680 --> 00:37:29,440
als Doku der Funktion. 
Ja, da triffst du Nagel auf dem 

798
00:37:29,440 --> 00:37:33,040
Kopf, weil das ist also mehr 
flexibel und more extendable 

799
00:37:33,040 --> 00:37:35,040
kannst du eine Architektur nicht
gestalten? 

800
00:37:35,040 --> 00:37:37,520
Ja, weil. 
Wir können halt, ohne dass wir 

801
00:37:37,520 --> 00:37:39,880
unser unser Framework anfassen 
müssen, ohne dass wir es noch 

802
00:37:39,880 --> 00:37:42,960
mal testen müssen, können wir 
halt einfach neue Funktionalität

803
00:37:42,960 --> 00:37:45,840
hinzukleben, genauso wie du es 
gesagt hast, indem wir einfach 

804
00:37:46,240 --> 00:37:49,880
neuen Code registrieren, der 
dann als Baustein auftaucht und 

805
00:37:49,880 --> 00:37:51,200
da hat ja erst mal noch nichts 
gemacht. 

806
00:37:51,200 --> 00:37:53,880
Ja und ob der dann in sich 
funktioniert oder nicht, das ist

807
00:37:53,880 --> 00:37:58,040
ne andere Frage, aber unsere 
Plattform, die stört das nicht, 

808
00:37:58,040 --> 00:38:00,640
die die hat einfach nur mehr 
Power, mehr Funktionalität da, 

809
00:38:00,640 --> 00:38:03,240
das ist halt Key. 
Ja dadurch sind wir unglaublich 

810
00:38:03,240 --> 00:38:05,360
schnell, ja. 
Und kleiner Teaser darüber 

811
00:38:05,360 --> 00:38:07,440
sprechen wir heute nicht zu 
lange, aber wir wissen ja alle, 

812
00:38:07,440 --> 00:38:10,800
KI kann sehr gut coden und vor 
allen Dingen, wenn es kleine 

813
00:38:10,800 --> 00:38:14,080
Blöckchen sind, ja, und das 
kommt jetzt auch nächstes Jahr, 

814
00:38:14,080 --> 00:38:18,400
könnte könnte schon gespannt 
sein, wir werden KI quasi zum 

815
00:38:18,400 --> 00:38:22,200
Coden animieren von genau diesen
Funktionen und und die kann auch

816
00:38:22,200 --> 00:38:25,640
gut dokumentieren und so weiter 
und dann wird unser Produkt very

817
00:38:25,640 --> 00:38:28,240
extendable ja also wir können 
dann diese Lego blöckchen können

818
00:38:28,240 --> 00:38:30,160
wir dann. 
In höchster Geschwindigkeit 

819
00:38:30,160 --> 00:38:31,960
quasi generieren, weil KI sie 
schreibt. 

820
00:38:31,960 --> 00:38:34,320
Es wird sofort registriert, 
ploppt auf in dem, was Gerrit 

821
00:38:34,320 --> 00:38:36,560
gesagt hat, in dieser 
Seitenansicht mit dem Treview 

822
00:38:36,880 --> 00:38:38,320
und wird sofort benutzbar. 
Ja und? 

823
00:38:38,480 --> 00:38:40,480
Wenn du sagst, wir können das, 
dann heißt das, unsere Nutzer 

824
00:38:40,480 --> 00:38:41,920
können. 
Unsere Nutzer können das genau. 

825
00:38:41,920 --> 00:38:44,400
Ja, unsere Nutzer können dann 
einfach Wipe coden. 

826
00:38:44,400 --> 00:38:48,160
Ja, innerhalb von unserem, 
unserem Produkt und jetzt und 

827
00:38:48,160 --> 00:38:51,520
das das sag ich nur einmal, weil
weil sonst komm ich in 

828
00:38:51,520 --> 00:38:54,160
Schwingung, wie ich das so cool 
finde, denn. 

829
00:38:54,840 --> 00:38:57,280
Das größte Problem, was wir mit 
dem Vipe Code haben im Moment 

830
00:38:57,280 --> 00:39:00,960
ist, dass MKI es noch noch nicht
beherrscht, große Komplexität 

831
00:39:00,960 --> 00:39:02,600
abzubilden. 
Ja, sie ist hervorragend da 

832
00:39:02,600 --> 00:39:05,400
drinne, spezifische Prompts 
durch zu implementieren, zu 

833
00:39:05,400 --> 00:39:07,160
sagen macht mir die Funktion, 
die genau das Macht, oder haben 

834
00:39:07,160 --> 00:39:10,040
wir ne Klasse von mir aus sogar 
die das und das kann ne und und 

835
00:39:10,040 --> 00:39:12,960
die Komplexität, aber ja das 
machen wir genau, indem wir 

836
00:39:12,960 --> 00:39:15,080
Funktionen ineinander in 
Beziehung setzen, später mit 

837
00:39:15,080 --> 00:39:17,920
unserem Loco oder wir machen ja 
Flows und Events und Komplexität

838
00:39:17,920 --> 00:39:20,640
mit User und Mandantenfähigkeit 
alles schon fertig bei uns ja. 

839
00:39:21,280 --> 00:39:24,240
Und das ist halt hier. 
Können wir die KI voll 

840
00:39:24,240 --> 00:39:27,440
einsähmen, dass wir, obwohl wir 
Vibe Coden können, wir 

841
00:39:27,440 --> 00:39:31,360
Enterprise Quality Software 
kreieren, weil wir diese 

842
00:39:31,360 --> 00:39:33,680
legoblöcke können wir nämlich 
sehr mehr internen und und 

843
00:39:33,680 --> 00:39:36,840
stabilisieren und reviewen und 
den Rest, da wissen wir ja, dass

844
00:39:36,840 --> 00:39:38,880
es funktioniert, das ist der 
Quality Check Bass. 

845
00:39:38,880 --> 00:39:42,520
Ja, insofern können wir sehr 
komplexe Apps aufbauen und 

846
00:39:42,520 --> 00:39:46,560
trotzdem dieses volle Potenzial 
von KI ausschöpfen, ohne dass KI

847
00:39:46,560 --> 00:39:48,640
überfordert ist mit der 
Komplexität dann das sieht die 

848
00:39:48,640 --> 00:39:50,240
dann gar nicht, das ist auch 
Wurst, das machen. 

849
00:39:50,480 --> 00:39:53,360
Das macht quasi noch am Anfang 
noch der unser Nutzer. 

850
00:39:53,360 --> 00:39:56,200
Vielleicht am Ende gibt es dann 
quasi ne zweite KI Instanz, die 

851
00:39:56,200 --> 00:39:58,800
dann auch noch diese diese 
Sachen zusammenschiebt, aber da 

852
00:39:58,800 --> 00:40:01,600
da wollen wir jetzt mal nicht zu
steil versprechen abgeben, aber.

853
00:40:02,080 --> 00:40:03,200
Genau. 
Wenn das alles soweit ist, 

854
00:40:03,200 --> 00:40:06,360
melden wir uns noch mal würde 
ich sagen ne genau so, jetzt 

855
00:40:06,360 --> 00:40:09,600
haben wir die Funktion durch die
x und mal verstanden wie das 

856
00:40:10,400 --> 00:40:13,600
Prinzip oder das Konzept der OOP
bei uns eigentlich abgebildet 

857
00:40:13,600 --> 00:40:15,680
ist. 
Ne und und was Funktionen so 

858
00:40:15,680 --> 00:40:17,680
gemein haben. 
Ja, genau. 

859
00:40:18,480 --> 00:40:19,680
Genau. 
Und jetzt hab ich irgendwie so 

860
00:40:19,680 --> 00:40:21,520
schön n Bildchen erzählt und 
jetzt jetzt gehen wir noch mal n

861
00:40:21,520 --> 00:40:24,160
bisschen ins Eingemachte für für
alle die jetzt coden können, die

862
00:40:24,160 --> 00:40:26,160
wissen jetzt immer noch nicht 
was wir genau machen, also 

863
00:40:26,240 --> 00:40:28,480
beantworte ich die Frage, wo 
lebt denn eigentlich dieser 

864
00:40:28,480 --> 00:40:31,680
digitale Funktionszwilling den 
ich so nenne, der heißt übrigens

865
00:40:31,680 --> 00:40:34,160
die Klasse heißt übrigens 
executor, das sag ich mal gerade

866
00:40:34,160 --> 00:40:36,280
die könnte hätte man auch 
Funktion nennen können, aber ich

867
00:40:36,280 --> 00:40:38,040
find in Klasse die Funktion 
heißt fand ich irgendwie 

868
00:40:38,040 --> 00:40:41,760
schwierig, mentaler Flip, 
insofern heißt die Executor 

869
00:40:41,760 --> 00:40:43,920
einfach ausführer einer 
Funktion. 

870
00:40:44,400 --> 00:40:46,120
Und tatsächlich ist, das muss 
ich mir jetzt auch noch mal n 

871
00:40:46,120 --> 00:40:48,600
Paar sagen, Sachen wie sieht das
aus, ja, und was ist das genau? 

872
00:40:48,600 --> 00:40:52,000
Ja, natürlich muss der Executor 
in einem Backend sein, also wir 

873
00:40:52,000 --> 00:40:54,000
haben gerade am Anfang gesagt, 
wir haben ne Webanwendung, wir 

874
00:40:54,000 --> 00:40:56,160
haben also zum Beispiel n 
Frontend, also unseren Baukasten

875
00:40:56,160 --> 00:40:59,600
zum Beispiel, ja, und wir haben 
auch n Backend, und dieser 

876
00:40:59,600 --> 00:41:03,920
digitale Zwilling, den kann man 
zwar im UI sehen, aber leben tut

877
00:41:03,920 --> 00:41:07,360
er im Backend, ja, das ist 
wichtig, da muss man vorher auch

878
00:41:07,360 --> 00:41:09,200
einmal überlegen bei der 
Architektur, weil du willst ja 

879
00:41:09,200 --> 00:41:11,120
nicht. 
Also du könntest natürlich auch 

880
00:41:11,120 --> 00:41:13,600
n Frontend machen, das hieß ja 
aber wenn du die App zumachst, 

881
00:41:13,600 --> 00:41:15,440
dann ist vorbei mit 
Funktionsaufrufen. 

882
00:41:15,480 --> 00:41:18,560
Ja du willst ja aber so Sachen 
machen, keine Ahnung, alle 2 

883
00:41:18,560 --> 00:41:20,560
Sekunden will ich von meiner 
Hardware irgendwas rausholen und

884
00:41:20,560 --> 00:41:22,000
so weiter ja das soll ja 
gefälligst auch noch 

885
00:41:22,000 --> 00:41:24,560
weiterlaufen, selbst wenn ich 
die App schließe, sonst ne 

886
00:41:24,560 --> 00:41:27,520
gesamtkatastrophe ja, also das 
ist relativ klar, das lebt halt 

887
00:41:27,520 --> 00:41:31,680
im im im Backend ja von uns ja 
und der Executor der quasi 

888
00:41:31,680 --> 00:41:34,320
digital Zwilling einer Funktion 
ist ist selber erstmal ne klasse

889
00:41:34,320 --> 00:41:36,800
technisch ich hab halt ne 
executor Klasse geschrieben, 

890
00:41:36,800 --> 00:41:39,280
klar ist executor in no chair 
ist ja hat. 

891
00:41:39,680 --> 00:41:43,120
Ungefähr zweieinhalbtausend 
teilen Code ja, also ist kein 

892
00:41:43,120 --> 00:41:45,080
kleines Ding. 
Ja, ist da, da steckt relativ 

893
00:41:45,080 --> 00:41:47,280
viel Know How drin, ne weil und 
und das macht aber nichts 

894
00:41:47,280 --> 00:41:50,360
anderes als ne Funktion 
abzubilden, ja, aber diese ganze

895
00:41:50,360 --> 00:41:53,440
Standardisierung, dieses Ganze 
behandeln von den Promises und 

896
00:41:53,440 --> 00:41:55,720
von den Exceptions und so weiter
das ist halt auch zum Teil mit 

897
00:41:55,720 --> 00:41:59,640
drin, zum Teil auch VAPC, aber 
genau deswegen ist das nicht 

898
00:41:59,640 --> 00:42:02,880
nicht gerade kurz, ja. 
So, und aber dieser Executor, 

899
00:42:02,880 --> 00:42:05,040
das das ist noch mal, um das 
klar zu sagen, ist nicht die 

900
00:42:05,040 --> 00:42:06,640
Funktion, die wir aufrufen 
wollen. 

901
00:42:06,640 --> 00:42:09,160
Das ist quasi n Proxy dafür. 
Also das ist, das ist der 

902
00:42:09,160 --> 00:42:12,640
digitale Zwilling, der dann noch
aufruft, das heißt, wenn wenn 

903
00:42:12,640 --> 00:42:16,960
der User sagt für aus in der UI,
dann geht dieser Befehl runter 

904
00:42:16,960 --> 00:42:19,960
zu dem digitalen Zwilling der 
Funktion im Backend, da wird 

905
00:42:19,960 --> 00:42:23,200
dann gesagt für aus diese 
Funktion und der hat quasi nur 

906
00:42:23,200 --> 00:42:25,560
die Adresse gespeichert zu der 
echten physikalischen Funktion, 

907
00:42:25,560 --> 00:42:28,800
die irgendwo liegt und der sagt 
dann noch mal für aus du 

908
00:42:28,800 --> 00:42:31,000
Funktion ne. 
Und gib mir erstmal das 

909
00:42:31,000 --> 00:42:33,360
Ergebnis. 
Ich hab das dann im Backend drin

910
00:42:33,600 --> 00:42:35,520
und dann schick ich es wieder 
ans Frontend zurück. 

911
00:42:35,520 --> 00:42:37,680
Ah guck mal, hast auch hab 
ausgeführt da ist der 

912
00:42:37,680 --> 00:42:39,920
Rückgabewert so du. 
Meinst jetzt aber, wenn man im 

913
00:42:39,920 --> 00:42:41,480
im App Builder ist quasi wenn 
man. 

914
00:42:41,520 --> 00:42:45,640
Noch im MM Builder ist ja ja ja 
genau, also es ist n Dreieck ne,

915
00:42:45,640 --> 00:42:49,360
also es sind 3 Dinger. 
Ja die UI hat ne hat ne 

916
00:42:49,360 --> 00:42:52,400
Darstellung der Funktion, dann 
gibt es im Backend eine 

917
00:42:52,400 --> 00:42:55,440
Darstellung der Funktion als 
aber technisch quasi ja. 

918
00:42:55,840 --> 00:42:58,400
Und tatsächlich ist das ist jede
einzelne Funktion, die wir so 

919
00:42:58,400 --> 00:43:01,040
ziehen können, auf unser Brett, 
auf unserem, Wir nennen es Flow 

920
00:43:01,040 --> 00:43:04,640
Builder, ja ist eine Instanz der
Executor Klasse. 

921
00:43:04,640 --> 00:43:07,760
Ja, das und das ist auch 
wichtig, weil wir müssen den 

922
00:43:07,760 --> 00:43:11,680
State isolieren, ja, jede 
Instanz merkt sich halt die die 

923
00:43:11,680 --> 00:43:13,680
Argumente, die ich rein 
konfiguriert hab und so weiter 

924
00:43:13,680 --> 00:43:16,200
ja jetzt kommt, vielleicht kommt
vielleicht das Bild zusammen, 

925
00:43:16,200 --> 00:43:18,480
ja, aber ich kann jetzt in dem 
in der UI kann ich in die 

926
00:43:18,480 --> 00:43:21,400
Argumente konfigurieren, da 
schreib ich das halt rein ne was

927
00:43:21,400 --> 00:43:24,560
weiß ich my Sequel oder 
Irgendsowas bei dem Dialekt ja. 

928
00:43:25,040 --> 00:43:27,160
Das muss ja jetzt irgendwo 
gemerkt werden und das merkt 

929
00:43:27,160 --> 00:43:29,000
sich halt der digitales Zwilling
im Backend. 

930
00:43:29,000 --> 00:43:32,480
Der speichert das alles hin, ja,
und ganz wichtig, das war n. 

931
00:43:32,480 --> 00:43:36,040
Knackpunkt in der ganzen 
Architektur hier an dieser 

932
00:43:36,040 --> 00:43:39,520
Stelle lösen wir die 
Mandantenfähigkeit, was mein ich

933
00:43:39,520 --> 00:43:42,800
denn jetzt, damit ich mein jetzt
damit, dass am Ende des Tages 

934
00:43:42,800 --> 00:43:44,720
wird? 
Ja, es ist ja n App Baukasten 

935
00:43:44,720 --> 00:43:47,360
und jetzt ist ja so, dass die 
App nicht nur einer bedient. 

936
00:43:47,360 --> 00:43:51,440
Ja, das ist einfache, ich sag 
mal Dashboard Builders, die 

937
00:43:51,440 --> 00:43:55,120
haben nur einen Nutzer im Kopf. 
Alle sehen das Gleiche und 

938
00:43:55,120 --> 00:43:56,880
bekommen das Gleiche. 
Und wenn du da irgendwie dann im

939
00:43:56,880 --> 00:43:58,960
Hebel ziehst, dann zieht sich 
der Hebel für alle gleich. 

940
00:43:58,960 --> 00:44:01,200
Ja, das ist dann nicht 
mandantenfähig. 

941
00:44:01,200 --> 00:44:04,560
Das Single User Interface sagt 
man auch, ja, wir haben aber n 

942
00:44:04,560 --> 00:44:09,240
Multi User Interface und das 
heißt wenn wenn wir jetzt ich 

943
00:44:09,240 --> 00:44:11,680
mach mal das Beispiel ganz 
einfach wenn dann einfach 2 

944
00:44:11,680 --> 00:44:15,760
Leute die gebaute App in die 
Hand bekommen und die eine 

945
00:44:15,760 --> 00:44:18,000
Funktion die Gerrit dahin 
gemacht hat und jetzt nehmen wir

946
00:44:18,000 --> 00:44:21,760
nehmen wir die Funktion Get 
Weather und die das Argument 

947
00:44:21,760 --> 00:44:24,680
wäre wie viele. 
Wie viele Get Weather Forecast 

948
00:44:24,680 --> 00:44:26,800
und das Argument wäre zum 
Beispiel wie viele Stunden 

949
00:44:26,800 --> 00:44:29,120
voraus? 
Ja dann muss es so sein, dass 

950
00:44:29,120 --> 00:44:32,120
diese eine Funktion, die da 
steht, wenn der Gerrit sagt, 2 

951
00:44:32,120 --> 00:44:35,760
Stunden voraus für den Gerrit 
wieder zurück die 2 Stunden 

952
00:44:35,760 --> 00:44:39,440
voraus Rückgabewert liefert aber
für mich wenn ich sage 5 Stunden

953
00:44:39,440 --> 00:44:42,720
voraus meine 5 Stunden 
vorausliefert und das auch nicht

954
00:44:42,720 --> 00:44:45,520
durchmixt und so weiter und 
sofort, ja, das nennt sich 

955
00:44:45,520 --> 00:44:48,720
Mandantenfähigkeit und die muss 
ich krasserweise sogar 

956
00:44:48,720 --> 00:44:51,680
durchziehen, wenn wir Funktionen
koppeln, wir können nämlich wir 

957
00:44:51,680 --> 00:44:54,720
können sagen der der 
Rückgabewert, der einen Funktion

958
00:44:54,720 --> 00:44:58,000
wird Eingabe wird quasi Argument
einer nächsten Funktion. 

959
00:44:58,240 --> 00:45:01,520
So machen wir komplexe Logik und
das kann ja auch sein, dass zum 

960
00:45:01,520 --> 00:45:04,640
Beispiel wenn jetzt Gerrit sagt,
2 Stunden Vorhersage für das 

961
00:45:04,640 --> 00:45:07,200
Wetter, das kommt dann erst mal 
aus dieser API Funktion raus und

962
00:45:07,200 --> 00:45:09,200
dann geht das noch in eine 
andere Funktion rein, rechnet 

963
00:45:09,200 --> 00:45:12,080
irgendwas weiter und dann kommt 
das zum Gerrit zurück und 

964
00:45:12,080 --> 00:45:16,640
während dieses ganzen Prozesses.
Muss klar sein, das wird das ist

965
00:45:16,640 --> 00:45:19,640
von Gerrit, das ist nur für 
Gerrit und nicht für jemanden 

966
00:45:19,640 --> 00:45:20,960
anders, das darf auch nicht 
liegen. 

967
00:45:20,960 --> 00:45:22,880
Ja und das kommt auch nur zu 
Gerrit zurück. 

968
00:45:22,880 --> 00:45:25,920
Ja, während des ganzen 
Durchflaufen und gleichzeitig 

969
00:45:25,920 --> 00:45:28,360
vielleicht macht der Burkhard 
das gleiche, aber mit ganz 

970
00:45:28,360 --> 00:45:31,360
anderen Argumenten, Parametern 
auf der gleichen Funktion, ne, 

971
00:45:31,760 --> 00:45:36,480
das ist very twicky und das 
haben wir gelöst, indem sich 

972
00:45:36,480 --> 00:45:40,320
halt so ne executor Instanz 
tatsächlich den User merkt. 

973
00:45:40,320 --> 00:45:42,800
Ja da stehen die alle drin ne 
und macht das sauber. 

974
00:45:43,240 --> 00:45:46,800
Macht das Sauber in der Instanz 
klar im Backend über alle 

975
00:45:46,800 --> 00:45:49,680
Funktionen hinweg. 
Existiert also für jeden User 

976
00:45:49,680 --> 00:45:53,920
der App eine Instanz? 
Nein, es existiert eine Instanz 

977
00:45:53,920 --> 00:45:57,280
der Funktion und innerhalb der 
Instanz habe ich State, dass das

978
00:45:57,280 --> 00:45:58,560
ist ja das, was eine Instanz 
ausmacht. 

979
00:45:58,560 --> 00:46:01,200
Da habe ich quasi eine 
Dictionary tatsächlich für alle 

980
00:46:01,200 --> 00:46:04,960
User, die gerade diese Funktion 
ausführen und ich ruf dann die 

981
00:46:04,960 --> 00:46:07,680
Funktion auf Get Weather für 
dich, Gerrit. 

982
00:46:08,400 --> 00:46:11,280
Und und kriege dann den auf den 
Rückgabewert und Speicher, den 

983
00:46:11,280 --> 00:46:14,040
in der einen Instanz dieser 
Funktion unter deinem Namen da 

984
00:46:14,040 --> 00:46:16,400
steht quasi gerrits, 
rückgabewert, Doppelpunkt, 

985
00:46:16,800 --> 00:46:20,000
irgendwas und dann steht da 
burkhards, ja genau, burkhards 

986
00:46:20,000 --> 00:46:23,120
rückgabewert doppelpunkt, ja, 
das ist quasi innen drin und das

987
00:46:23,120 --> 00:46:26,800
Dispatching später zu der zu der
UI, das passiert wieder clever, 

988
00:46:26,800 --> 00:46:28,680
deswegen hat das auch 
zweieinhalbtausend Zeilen Code, 

989
00:46:28,680 --> 00:46:31,040
das da muss man n bisschen 
aufpassen, ja das ist aber an 

990
00:46:31,040 --> 00:46:34,040
der Stelle, das ist ich weiß, 
ich weiß gar nicht, ob das so 

991
00:46:34,040 --> 00:46:36,320
gut ist, wir es heute, wir 
machen, dass ich das Nähkästchen

992
00:46:36,320 --> 00:46:38,720
relativ weit aufhaut da kann man
richtig weit reingucken an die 

993
00:46:38,720 --> 00:46:42,560
Volleyball, aber das ist der 
Knackpunkt, da hab ich lange 

994
00:46:42,560 --> 00:46:45,720
dran gezappelt, aber das ist, 
stellt sich heraus, die einzig 

995
00:46:45,720 --> 00:46:49,000
elegante Art und Weise, wie ich 
finde, dass man auf so einem 

996
00:46:49,000 --> 00:46:51,640
generischen Level dieses Multi 
tendency Problem lösen kann, ne 

997
00:46:51,680 --> 00:46:54,360
das nicht du weißt Gerrit, ich 
hab ich bin früher mit 

998
00:46:54,360 --> 00:46:56,240
rauchendem Kopf gelaufen, es hat
auch nicht immer von von 

999
00:46:56,240 --> 00:46:59,040
vornherein funktioniert und es 
ist Hardcore kompliziert. 

1000
00:46:59,440 --> 00:47:01,680
Weil wir auch noch Events aus 
der Hardware können. 

1001
00:47:01,840 --> 00:47:04,000
Und die sind ganz anders, die 
haben keine Nase, da gibt es 

1002
00:47:04,000 --> 00:47:06,400
quasi nur eine Sorte n 
Garagentor gibt es nur einmal ja

1003
00:47:06,400 --> 00:47:10,080
oder der GPIO pin ja wenn der 
sagt ich hab was, dann ist es 

1004
00:47:10,080 --> 00:47:13,600
halt nur der verdammte GPIO pin 
ja und möglicherweise wollen 

1005
00:47:13,600 --> 00:47:16,400
dann aber der Gerrit, der 
Burkhard und der Albert den GPIO

1006
00:47:16,400 --> 00:47:19,040
Pinwert sehen in ihrer Funktion 
und so weiter also da muss man, 

1007
00:47:19,760 --> 00:47:22,760
da muss man in 1015 20 mal 
drüber nachdenken, dass man das 

1008
00:47:22,760 --> 00:47:24,560
dann richtig hinkriegt, aber 
wenn es einmal hat hat man es 

1009
00:47:24,560 --> 00:47:25,680
halt, dann funktioniert es für 
alles. 

1010
00:47:25,680 --> 00:47:28,400
Ja das ist das geile ja. 
Deswegen hat es auch n bisschen 

1011
00:47:28,400 --> 00:47:30,480
gedauert, bis wir jetzt so da 
sind, wo wir da sind. 

1012
00:47:31,040 --> 00:47:34,040
Aber jetzt sind wir ja so 
generisch, dass wir sicher sein 

1013
00:47:34,040 --> 00:47:36,240
können, es funktioniert halt, 
egal was für ne Funktion. 

1014
00:47:36,240 --> 00:47:38,320
Ja wenn es einmal funktioniert, 
funktioniert es halt immer. 

1015
00:47:38,320 --> 00:47:41,080
Ja, dafür war halt die die 
anfängliche Arbeit n bisschen 

1016
00:47:41,080 --> 00:47:43,840
härter, ja. 
Das kann ich bestätigen, dass 

1017
00:47:43,840 --> 00:47:45,800
das. 
Die ein oder andere Session am 

1018
00:47:45,800 --> 00:47:49,160
Whiteboard gefordert hat, dass 
wir das auseinander geknotet 

1019
00:47:49,160 --> 00:47:50,320
hatten. 
Überhaupt, dass wir das Problem 

1020
00:47:50,320 --> 00:47:52,320
verstanden haben. 
Komplett würde ich sagen, ja, 

1021
00:47:52,400 --> 00:47:54,280
das ist dann, um dann 
verschiedene Lösungen 

1022
00:47:54,280 --> 00:47:56,880
durchzuexen ja und ich war fast 
eher so n robber Duck, dann in 

1023
00:47:56,880 --> 00:47:58,360
dem Fall. 
Ja, ihr könnt. 

1024
00:47:58,360 --> 00:48:00,240
Ihr könnt euch nicht vorstellen,
was es da alles für Edge Cases 

1025
00:48:00,240 --> 00:48:01,960
und Probleme gibt. 
Ja, das ist der Hammer, wenn man

1026
00:48:01,960 --> 00:48:04,400
sich, wenn man sich aufmalt das 
wird n relativ großes Whiteboard

1027
00:48:04,400 --> 00:48:06,760
ja, aber um das noch mal zu 
sagen und das das würde ich 

1028
00:48:06,760 --> 00:48:09,280
gerne noch mal festhalten ist du
kannst bei uns wirklich hingehen

1029
00:48:09,280 --> 00:48:11,280
und. 
Durch die Nutzung dieser 

1030
00:48:11,280 --> 00:48:14,120
visuellen Abbilder oder 
irgendwann digitalen Zwege der 

1031
00:48:14,120 --> 00:48:17,920
Funktionen deine Logik aufbauen,
ne wie Burkhard sagte, dass den 

1032
00:48:17,920 --> 00:48:20,040
Output von der einen Funktion 
auch wieder als Input Argument 

1033
00:48:20,040 --> 00:48:22,960
für ne weitere benutzen und so 
beliebig lange Logik zu bauen. 

1034
00:48:22,960 --> 00:48:26,240
Wir sprechen manchmal von Flows,
dann auch wirklich aufzubauen, 

1035
00:48:26,560 --> 00:48:29,280
dann irgendeinen Wert auch in 
einem Frontend auch anzuzeigen, 

1036
00:48:29,280 --> 00:48:31,120
ja der da vielleicht aus dem 
Flow rauspurzelt wie zum 

1037
00:48:31,120 --> 00:48:35,240
Beispiel n Wetter forecast jetzt
in aus deinem Beispiel und wenn 

1038
00:48:35,240 --> 00:48:38,240
das mal gebaut ist und man diese
App deployed, dann können das 

1039
00:48:38,240 --> 00:48:41,640
beliebig viele Nutzer. 
Benutzen ja sogar ohne dass sie 

1040
00:48:41,640 --> 00:48:44,880
sich einloggen müssten oder so. 
Und jeder kann das genau so 

1041
00:48:45,200 --> 00:48:47,520
benutzen, wie er das möchte, 
also seinen persönlichen 

1042
00:48:47,520 --> 00:48:50,400
Podcasts, also in Stunden 
angeben und kriegt n Ergebnis 

1043
00:48:50,400 --> 00:48:52,640
raus. 
Ja das das das ermöglicht, das 

1044
00:48:52,640 --> 00:48:55,600
würd ich gern noch mal 
unterstreichen hier ja im Grunde

1045
00:48:55,600 --> 00:48:57,920
genommen wie wenn ihr euch ne 
Wetterapps installiert, ihr geht

1046
00:48:57,920 --> 00:48:59,520
ja auch nicht davon aus, dass 
ihr n Wetterbericht von wem 

1047
00:48:59,520 --> 00:49:02,840
anders seht. 
Ja, es ist irgendwie ganz klar, 

1048
00:49:02,840 --> 00:49:05,080
dass es so sein muss, aber 
technisch ist es überhaupt nicht

1049
00:49:05,080 --> 00:49:08,080
so klar, wie man das realisiert.
Ja, das ist der Channel und vor 

1050
00:49:08,080 --> 00:49:10,880
allem, dass es Halt möglich ist,
das zu das so generisch zu 

1051
00:49:10,880 --> 00:49:14,400
bauen, ja, und das ist dann für 
den Nutzer der das Apple das 

1052
00:49:14,720 --> 00:49:16,440
einfach gelöst ist. 
Ja dann muss sich aber keiner 

1053
00:49:16,440 --> 00:49:17,920
Gedanken, das ist ja das 
Spannende hier. 

1054
00:49:18,960 --> 00:49:22,000
OK, genau also ich, ich 
unterstreich vielleicht noch mal

1055
00:49:22,000 --> 00:49:24,240
diese 3 Komponenten, es gibt 
also quasi die UI. 

1056
00:49:24,240 --> 00:49:27,440
Im Prinzip konfiguriere ich ne 
Funktion mit den Eingabewerten, 

1057
00:49:27,440 --> 00:49:30,640
dann kann ich sie ausführen. 
Und dann wird quasi über das 

1058
00:49:30,640 --> 00:49:32,800
über den digitalen Zwilling dann
Beck endlich tatsächlich die 

1059
00:49:32,800 --> 00:49:35,440
Funktion da auch ausgeführt. 
Das heißt, die diese Instant hat

1060
00:49:35,440 --> 00:49:37,600
ne Adresse, das ist sehr 
wichtig, muss wissen mit wem 

1061
00:49:37,600 --> 00:49:40,000
sprech ich, diese Adresse ist 
auch standardisiert bei uns, 

1062
00:49:40,400 --> 00:49:43,080
dann mach ich diesen diesen 
Aufruf wie ich den mache ist mit

1063
00:49:43,080 --> 00:49:45,920
VRPC per Remote procedure Call 
sag ich gleich noch was, kommt 

1064
00:49:45,920 --> 00:49:48,680
er wieder zurück und wir haben 
für alles und jedes also wir 

1065
00:49:48,680 --> 00:49:50,600
haben die Funktion noch mal 
auseinander genommen, ihr könnt 

1066
00:49:50,600 --> 00:49:52,400
euch ja jetzt vorstellen, ich 
hab Argumente gesagt und 

1067
00:49:52,400 --> 00:49:55,040
Rückgabewert und Fehler und so 
weiter und Trigger. 

1068
00:49:55,320 --> 00:49:56,560
Tatsächlich sind das eigene 
Boxen. 

1069
00:49:56,560 --> 00:49:59,240
Bei uns ist auch wichtig, jedes 
Argument ist ne eigene Box, wo 

1070
00:49:59,240 --> 00:50:03,280
ich quasi den Datentyp reintun 
kann und dann der Trigger ist 

1071
00:50:03,280 --> 00:50:04,800
quasi ne eigene Box, ist also n 
Knopf. 

1072
00:50:04,800 --> 00:50:08,400
Ich führ aus ja oder ich lass 
ausführen alle 2 Sekunden oder 

1073
00:50:08,400 --> 00:50:10,400
irgend so was kann man da alles 
möglich machen und der Output 

1074
00:50:10,400 --> 00:50:12,720
quasi auch ne Box da zeigt sich 
dann quasi der Rückgabewert an 

1075
00:50:12,720 --> 00:50:15,720
und alle und alle diese Boxen 
und so das ganze Gedöns ist 

1076
00:50:15,720 --> 00:50:19,280
quasi liegt auch im State 
innerhalb einer Instanz von so 

1077
00:50:19,280 --> 00:50:22,920
einem Execute drinne und diese 
ganzen Boxen haben alle IDS, das

1078
00:50:22,920 --> 00:50:24,160
will ich noch mal sagen wenn 
wenn ihr. 

1079
00:50:24,480 --> 00:50:28,320
Also mein Tipp, wenn man größere
Architekturen baut IDS alles 

1080
00:50:28,320 --> 00:50:31,440
braucht ne Halt jedes jede 
Entität ist die noch so klein 

1081
00:50:31,440 --> 00:50:33,160
die du irgendwie individuell 
behandeln willst. 

1082
00:50:33,160 --> 00:50:37,200
Später hat ne ID zu haben, aber 
bei uns hat halt alles und jedes

1083
00:50:37,200 --> 00:50:39,520
ne ID und wir nutzen halt 
irgendwie nano ID zum Beispiel 

1084
00:50:39,760 --> 00:50:41,040
ist auch egal. 
Du brauchst halt irgendwie ne 

1085
00:50:41,040 --> 00:50:44,280
globale ID die nicht kollidiert.
Ja und dann wird alles ganz 

1086
00:50:44,280 --> 00:50:46,480
einfach ja und dann kannst du 
mit die und diese ganzen. 

1087
00:50:46,720 --> 00:50:49,640
Dieses Ganze, dass dass in der 
UI das richtig artig anzeigt und

1088
00:50:49,640 --> 00:50:52,000
so weiter das hat alles damit zu
tun, dass dass sich bestimmt auf

1089
00:50:52,000 --> 00:50:54,560
diese ganzen IDS registriert 
wird und die ganzen IDS schütt 

1090
00:50:54,560 --> 00:50:56,960
ich quasi als Information in die
UI und das wird plötzlich alles 

1091
00:50:56,960 --> 00:50:59,400
aussortierter. 
This is the way to go ja man, 

1092
00:50:59,400 --> 00:51:01,280
man arbeitet mit IDS und bloß 
nicht mit Instagram und 

1093
00:51:01,280 --> 00:51:03,600
irgendwas gezählten und 
irgendwelchen Indizes und so 

1094
00:51:03,600 --> 00:51:08,160
weiter nutzt IDS ja kurzer Tipp 
für für alle die irgendwie was 

1095
00:51:08,160 --> 00:51:10,040
Größeres bauen wollen hab ich 
auch nicht immer gemacht, war ne

1096
00:51:10,040 --> 00:51:14,320
Katastrophe ja geht schief, IDS 
nehmen gut so, da haben wir das 

1097
00:51:14,320 --> 00:51:16,400
verstanden. 
Und jetzt hab ich immer noch. 

1098
00:51:16,400 --> 00:51:18,000
Jetzt hab ich zwar schon wieder 
n bisschen mehr gesagt, wie wir 

1099
00:51:18,000 --> 00:51:20,360
das gemacht haben und wo es ist 
und so, aber jetzt haben wir 

1100
00:51:20,360 --> 00:51:22,240
noch nicht, hab ich noch nicht 
gesagt welchen Werkzeugkoffer 

1101
00:51:22,240 --> 00:51:25,320
mit welcher Technologie 
attackieren wir das ja dazu sag 

1102
00:51:25,320 --> 00:51:28,520
ich jetzt noch 23 schnelle 
Sätze, grundsätzlich erstellen 

1103
00:51:28,520 --> 00:51:30,360
wir halt Datentypen die wir für 
die Argumente und die 

1104
00:51:30,360 --> 00:51:34,240
Rückgabewerte brauchen und so 
weiter da mit Jason Jason ist 

1105
00:51:34,240 --> 00:51:37,440
The Way to User Jason kann genau
das ja hat genau diese datentype

1106
00:51:37,520 --> 00:51:41,080
kann das darstellen, es ging 
React wunderbar auch darstellbar

1107
00:51:41,080 --> 00:51:43,640
gibt es Libraries. 
Sieht man bei uns, kann man auch

1108
00:51:43,640 --> 00:51:45,360
so einklappen, das kann ja 
beliebig kompliziert und 

1109
00:51:45,360 --> 00:51:48,200
genestet sein, da kriegt man 
aber n Überblick, das kann man 

1110
00:51:48,200 --> 00:51:51,280
schön darstellen. 
Ja Jason und dann habt ihr jetzt

1111
00:51:51,280 --> 00:51:53,760
verstanden, wir arbeiten ja ganz
vieles ist alles Event 

1112
00:51:53,760 --> 00:51:55,720
getrieben, die gesamte 
Architektur, das ist glaub ich 

1113
00:51:55,720 --> 00:51:58,720
klar weil ich führ ne Funktion 
aus ist n Event die die der 

1114
00:51:58,720 --> 00:52:02,800
Executor schickt n Event an die 
tatsächliche Funktion bitte für 

1115
00:52:02,800 --> 00:52:05,760
aus dann kommt n Event ich hab 
fertig gemacht zurück oder es 

1116
00:52:05,760 --> 00:52:07,800
kommt ne Promis zurück danach 
kommt n Event ja mein 

1117
00:52:07,800 --> 00:52:10,240
Versprechen ist fertig und so 
weiter alles Events. 

1118
00:52:10,680 --> 00:52:12,520
Das heißt, es fliegen ganz viele
Events durch die Gegend. 

1119
00:52:12,520 --> 00:52:16,080
Was nimmt man dafür? 
MQTT ja, also wenn du schnelle 

1120
00:52:16,080 --> 00:52:19,840
viele Events und Nachrichten 
hast, MQTT so und jetzt musst du

1121
00:52:19,840 --> 00:52:22,120
noch eine Sache verstehen, wir 
sprechen ja davon, ich hab die 

1122
00:52:22,120 --> 00:52:25,360
ganze Zeit von standardisiert 
digitaler Zwilling von generisch

1123
00:52:25,360 --> 00:52:29,120
und so weiter gesprochen, jetzt 
hör ich auf bei MQTT einfach 

1124
00:52:29,120 --> 00:52:32,760
individuelle Messages zu 
formulieren, so und also 99% der

1125
00:52:32,760 --> 00:52:37,440
Welt nutzt MQTT um Nachrichten. 
An den bestimmten Topic zu 

1126
00:52:37,440 --> 00:52:39,400
schicken mit einem bestimmten 
Inhalt und jedes Mal wird das 

1127
00:52:39,400 --> 00:52:40,880
neu beschrieben. 
Was ist das und da gibt es dann 

1128
00:52:40,880 --> 00:52:43,480
apis auch zu asynchroner apis 
und so ein Quatsch, ja ist kein 

1129
00:52:43,480 --> 00:52:45,440
Quatsch, Entschuldigung also man
hat auch seinen Sinn, seine 

1130
00:52:45,440 --> 00:52:47,880
Verwandtheit, aber bei uns 
nicht, bei uns schreit das halt 

1131
00:52:47,880 --> 00:52:51,520
nach dem Protokoll ja also nach 
einer auch auf dem MQTT 

1132
00:52:51,520 --> 00:52:54,080
liegenden Standardisierung diese
Adressierung der Funktion, da 

1133
00:52:54,080 --> 00:52:55,880
gibt es adressierungen und die 
ganzen Events sind alle 

1134
00:52:55,880 --> 00:52:59,680
eingetütet, wir haben quasi 
strukturiertes Topic Pattern ja 

1135
00:53:00,080 --> 00:53:02,640
und das Topic Pattern ist 
genauso organisiert von der 

1136
00:53:02,640 --> 00:53:05,280
Hierarchie wie Gerrit das gesagt
hat, vom Blick her so quasi. 

1137
00:53:05,600 --> 00:53:08,280
Der Agent, also der Prozessname 
selber dann auf dem nächsten 

1138
00:53:08,280 --> 00:53:10,680
Level ist der Klassenname und 
auf dem übernächsten Level sind 

1139
00:53:10,680 --> 00:53:13,400
die statischen Funktionsnamen 
und die Konstruktoren und die 

1140
00:53:13,400 --> 00:53:15,320
Destruktoren. 
Und dann kommt noch die die 

1141
00:53:15,320 --> 00:53:18,640
Instanz, die Instanz hat n Namen
zu haben und da drunter die 

1142
00:53:18,640 --> 00:53:21,440
Funktionen der Instanz, das 
heißt Wir haben so ne 

1143
00:53:21,440 --> 00:53:24,000
fünfgliedrige Hierarchie wo 
alles einsortiert ist. 

1144
00:53:24,000 --> 00:53:27,600
Das das widerspiegelt quasi n 
Adressraum vor dem MQTT Broker 

1145
00:53:27,920 --> 00:53:30,360
und so werden halt die 
Nachrichten geroutet, dass die 

1146
00:53:30,360 --> 00:53:33,120
auch richtig ankommen und 
zurückkommen und so weiter plus 

1147
00:53:33,120 --> 00:53:34,840
x. 
Das schaff ich nicht in dem 

1148
00:53:34,840 --> 00:53:37,040
Podcast. 
Das ist wie gesagt 8 Jahre 

1149
00:53:37,040 --> 00:53:38,720
Entwicklung. 
Auch dass das alles passt mit 

1150
00:53:38,720 --> 00:53:41,000
den ganzen Promises und so 
weiter aber so grob kann man 

1151
00:53:41,000 --> 00:53:43,280
sich es vorstellen. 
Ne Pause. 

1152
00:53:45,920 --> 00:53:49,960
Kurz durchatmen, das ist der 
ganze Werkzeugkoffer, den man 

1153
00:53:49,960 --> 00:53:54,240
den man, den man braucht ja 
json, amcutity und und VRPC 

1154
00:53:54,240 --> 00:53:56,440
dann. 
Ja, für das, was ich jetzt 

1155
00:53:56,440 --> 00:53:59,440
gesagt hab und React ja erstmal 
ja. 

1156
00:54:00,240 --> 00:54:02,480
Genau. 
Und jetzt waren wir tief in der 

1157
00:54:02,480 --> 00:54:04,400
Ideen. 
Also ich hab ich hab jetzt sehr 

1158
00:54:04,400 --> 00:54:08,000
lange gebraucht um diese eine 
Idee quasi dieses Lego Bausteins

1159
00:54:08,000 --> 00:54:10,480
des Backends zu erzielen. 
Ja jetzt ist unsere heisenware 

1160
00:54:10,480 --> 00:54:14,240
Plattform natürlich noch viel 
größer und ich glaub wir nehmen 

1161
00:54:14,240 --> 00:54:17,680
uns die Zeit wir wir sind Folge 
100 übergeben wir mal die Stunde

1162
00:54:17,680 --> 00:54:19,920
die wir normalerweise machen, 
vielleicht noch bei 10 oder 15 

1163
00:54:19,920 --> 00:54:23,280
Minuten und ich erzähl kurz noch
den Rest wie das quasi 

1164
00:54:23,760 --> 00:54:26,560
eingebettet ist in den 
restlichen in die restliche 

1165
00:54:26,560 --> 00:54:29,280
Architektur und warum das 
insgesamt n schönes Bild gibt. 

1166
00:54:29,800 --> 00:54:31,080
Und das können wir etwas 
schneller machen. 

1167
00:54:31,080 --> 00:54:33,440
Aber mir war es extrem wichtig, 
dass man einmal dieses 

1168
00:54:33,440 --> 00:54:37,280
fundamentale Prinzip, weil das 
ist echt n Differentiator zu 

1169
00:54:37,280 --> 00:54:39,040
anderen Plattformen, das muss 
man mal so sagen, so 

1170
00:54:39,040 --> 00:54:41,840
funktioniert. 
Na meiner Meinung nach keine 

1171
00:54:41,840 --> 00:54:44,880
andere Plattform, die haben 
andere architektonische Ideen ja

1172
00:54:44,880 --> 00:54:47,280
von innen, wie das aufgebaut 
ist, da sind wir glaub ich 

1173
00:54:47,920 --> 00:54:51,880
unique ja und es ist natürlich 
auch ne n Risiko wie es so ist 

1174
00:54:51,880 --> 00:54:54,080
wenn man n Unternehmen macht, 
das ist also quasi unsere 

1175
00:54:54,480 --> 00:54:57,240
Invention sag ich mal. 
Aber es scheint ganz gut zu 

1176
00:54:57,240 --> 00:54:58,760
klappen. 
Ja, also wir wir, wir schaffen 

1177
00:54:58,760 --> 00:55:00,800
es, schöne Apps damit zu bauen, 
sagen wir es mal so, ja. 

1178
00:55:00,960 --> 00:55:02,800
Wir und unsere Nutzer und Kunden
ne. 

1179
00:55:02,800 --> 00:55:05,040
Genau, ja genau. 
Und es wird immer noch besser, 

1180
00:55:05,040 --> 00:55:06,960
weil es ist halt ne neue 
Technologie und wir müssen 

1181
00:55:06,960 --> 00:55:09,880
selber auch noch verstehen, wie 
kann man es noch geschmeidiger 

1182
00:55:09,880 --> 00:55:12,160
und noch schöner machen. 
Aber ja ich. 

1183
00:55:12,600 --> 00:55:14,880
Glaub man kann auch sagen, wir 
sind noch immer am Anfang. 

1184
00:55:15,120 --> 00:55:20,160
Ja, alles klar. 
Gut, Gerrit, wenn du wenn du 

1185
00:55:20,160 --> 00:55:23,600
bereit bist würd ich versuchen. 
Jetzt in größeren, gröberen 

1186
00:55:23,600 --> 00:55:26,560
Schritten noch mal das irgendwie
zusammenzusetzen zum Gesamtbild.

1187
00:55:27,120 --> 00:55:29,760
Ich bin immer bereit, auf jeden 
Fall ja, erwähnen gerne dabei, 

1188
00:55:29,760 --> 00:55:31,520
mal was da noch so für 
Komponenten drin sind. 

1189
00:55:31,520 --> 00:55:33,920
Also mit der Influx und. 
Der und so. 

1190
00:55:33,920 --> 00:55:35,680
Ja genau das würde ich jetzt 
machen. 

1191
00:55:35,680 --> 00:55:39,200
Ja genau genau, also gut jetzt, 
also gut dann dann geht es 

1192
00:55:39,200 --> 00:55:41,000
weiter, also jetzt habt ihr 
verstanden, dass wir so ne Art 

1193
00:55:41,000 --> 00:55:44,640
digitalen Zwilling von der 
Funktion haben, das löst quasi 

1194
00:55:44,640 --> 00:55:46,240
die den logischen Anteil einer 
App. 

1195
00:55:46,320 --> 00:55:48,920
Jetzt haben wir ja aber auch bei
uns als First Citizen, wie man 

1196
00:55:48,920 --> 00:55:51,200
so schön sagt in unserem Produkt
den. 

1197
00:55:51,480 --> 00:55:54,400
Visuellen Anteil einer App wir 
können ja auch Front entbauen 

1198
00:55:54,400 --> 00:55:56,840
oder beziehungsweise ihr könnt 
Front entbauen ganz einfach so n

1199
00:55:56,840 --> 00:55:59,200
bisschen wie bei powerpoint 
einfach drauf ziehen, Größe 

1200
00:55:59,200 --> 00:56:02,560
ändern, positionieren und so 
weiter und sofort ja und das 

1201
00:56:02,560 --> 00:56:04,560
kann man jetzt ganz schnell 
verstehen, weil was ich nämlich 

1202
00:56:04,560 --> 00:56:08,640
gemacht hab ist ein digitalen 
Zwilling eines Widgets, muss man

1203
00:56:08,640 --> 00:56:11,200
einfach wissen so n wenn ich 
irgendeinen Knopf anzeige oder 

1204
00:56:11,200 --> 00:56:14,840
nen Chart oder nen so n so n 
Tacho oder irgendsowas, dann ist

1205
00:56:14,840 --> 00:56:17,360
das halt nen Baustein, das ist 
halt n Widget ja. 

1206
00:56:17,760 --> 00:56:20,040
Und jetzt gibt es halt einen 
digitalen Zwilling von so einem 

1207
00:56:20,040 --> 00:56:23,120
Widget und der lebt auch im 
Backend krasserweise, das ist 

1208
00:56:23,120 --> 00:56:25,400
auch, muss man auch erstmal 
machen, das ist alles nicht im 

1209
00:56:25,400 --> 00:56:27,200
Frontend, das lebt alles im 
Backend. 

1210
00:56:27,200 --> 00:56:29,720
Wir haben also eine Widget 
klasse, genauso wie wir ne 

1211
00:56:29,720 --> 00:56:32,160
executor Klasse haben, die n 
Funktions digitaler Zwilling 

1212
00:56:32,160 --> 00:56:34,200
ist, haben wir ne Widget Klasse 
das ist ein Widget digitaler 

1213
00:56:34,200 --> 00:56:37,120
Zwilling und die wird halt auch 
durchkonfiguriert das macht man 

1214
00:56:37,120 --> 00:56:38,840
immer einfach drauf geklickt, da
kommt auch n Menü und dann sag 

1215
00:56:38,840 --> 00:56:42,520
ich halt irgendwie breite Höhe 
und so weiter Farbe tachonade so

1216
00:56:42,520 --> 00:56:44,920
und so und sofort ja. 
Ist alles einfach nur json? 

1217
00:56:44,920 --> 00:56:47,960
Konfiguration wird in der Widget
Instanz gespeichert. 

1218
00:56:47,960 --> 00:56:50,040
Jedes einzelne Widget was 
irgendwo auftaucht, jeder 

1219
00:56:50,040 --> 00:56:52,960
einzelne Knopf ist eine Instanz 
der Widget Class ja 

1220
00:56:52,960 --> 00:56:56,480
durchkonfiguriert und wenn der 
wenn die App lädt, dann sagt sie

1221
00:56:56,480 --> 00:56:59,240
Backend gib ihm mal alle Widgets
mit allen Positionen bam bam bam

1222
00:56:59,240 --> 00:57:02,240
bam bam dann wird das dahin 
gehingerendert und fertig ja und

1223
00:57:02,240 --> 00:57:07,840
weil das Widget auch im Backend 
lebt, neben den Executors und 

1224
00:57:07,840 --> 00:57:10,320
auch IDS hat und so weiter 
können wir jetzt sagen 

1225
00:57:10,480 --> 00:57:14,080
vermittelt durch die UI. 
Zieh den Rückgabewert von der 

1226
00:57:14,080 --> 00:57:18,120
Funktion, zum Beispiel Funktion 
sag ich mal random integer oder 

1227
00:57:18,120 --> 00:57:19,440
irgendsowas. 
Das ist die Funktion, die 

1228
00:57:19,440 --> 00:57:21,720
generiert ja einen 
randomisierten integer 

1229
00:57:21,720 --> 00:57:24,160
Rückgabewert zwischen 0 und 100 
oder irgendsowas, weil du im 

1230
00:57:24,160 --> 00:57:28,400
Argument gesagt hast Minimum 0 
Maximum 100 und jetzt ziehst du 

1231
00:57:28,400 --> 00:57:32,360
grafisch den Rückgabewert auf 
ein Widget, was so n Tacho ist. 

1232
00:57:32,800 --> 00:57:36,280
Und was passiert in echt in der 
UI eigentlich im Frontend gar 

1233
00:57:36,280 --> 00:57:39,840
nichts, im Backend wird jetzt 
gesagt, OK die ID. 

1234
00:57:41,160 --> 00:57:44,800
Ich hab gesagt, ID ja die ID von
dem executor Instanz Random 

1235
00:57:44,800 --> 00:57:47,840
integer beziehungsweise noch 
genauer die ID von dem 

1236
00:57:47,840 --> 00:57:53,360
rückgabewert Box von der 
Funktion Random Integer, die 

1237
00:57:53,920 --> 00:57:58,720
wird jetzt der Instanz von dem 
Widget Tacho hingegeben als 

1238
00:57:58,960 --> 00:58:01,560
richtig in ne Instanz mit 
dazugegeben und jetzt kennen die

1239
00:58:01,560 --> 00:58:05,120
sich und jetzt kann ich wenn 
wenn sich da der Wert verändert 

1240
00:58:05,120 --> 00:58:07,120
Event getrieben das passiert im 
Backend. 

1241
00:58:07,480 --> 00:58:09,680
Kann ich sagen, hier alter, du 
hast einen neuen Wert. 

1242
00:58:09,840 --> 00:58:13,040
Update das mal und jetzt gibt es
ein Event in die UI, das ist 

1243
00:58:13,040 --> 00:58:16,560
wichtig deswegen das ist auch 
ein Key Concept, da wird nichts 

1244
00:58:16,560 --> 00:58:18,600
gepolt. 
Wir haben einen Web Socket, eine

1245
00:58:18,600 --> 00:58:22,160
stehende Verbindung MQTT ist 
auch die Verbindung zwischen 

1246
00:58:22,160 --> 00:58:25,040
Frontend und Backend und jetzt 
sagt das Widget Ich hab vom 

1247
00:58:25,040 --> 00:58:29,920
Executor jetzt gekriegt 88 ja 
hier 88 ja und jeder der jetzt 

1248
00:58:29,920 --> 00:58:33,200
in die UI kriegt der kriegt halt
88 dahin gemeldet und das Widget

1249
00:58:33,200 --> 00:58:36,720
der Zeiger geht auf 88 ja. 
Easy, das heißt, wir haben auch 

1250
00:58:36,720 --> 00:58:40,480
da in so visuellen Blogs 
komplett generisch gezogen und 

1251
00:58:40,480 --> 00:58:44,320
können im Prinzip beliebige 
fertige Open Source wieder 

1252
00:58:44,320 --> 00:58:47,520
Bibliotheken von Widgets nehmen,
die da einbetten und mit 

1253
00:58:47,520 --> 00:58:49,680
beliebigen 
Funktionsrückgabewerten und so 

1254
00:58:49,680 --> 00:58:52,400
weiter verkabeln. 
Das ist komplett, ich sag mal 

1255
00:58:52,400 --> 00:58:55,400
der der Kreativität komplett 
freie Bahn gelassen. 

1256
00:58:55,400 --> 00:58:58,800
Ne Mhm, so funktioniert das ja. 
Das war neu für mich. 

1257
00:58:58,800 --> 00:59:01,720
Ja cool. 
Also ich hab schon, ich hab 

1258
00:59:01,720 --> 00:59:04,880
schon häufiger auch die, die die
Instanzen quasi von den Widgets 

1259
00:59:04,880 --> 00:59:07,440
ja gesehen, die sind ja auch 
kannst du sehen, wenn den 

1260
00:59:07,440 --> 00:59:10,400
Resources quasi ne Media Server 
irgendwo auch ja kannst du drauf

1261
00:59:10,400 --> 00:59:13,560
zugreifen genau aber dass das 
wie das funktioniert 

1262
00:59:13,560 --> 00:59:15,040
tatsächlich, das ist bei mir 
nicht klar. 

1263
00:59:15,480 --> 00:59:18,520
Ja, so funktioniert das OK und 
und dann gibt es quasi und jetzt

1264
00:59:18,520 --> 00:59:20,760
jetzt haben wir schon die 2 
wichtigsten Komponenten, nämlich

1265
00:59:20,760 --> 00:59:24,200
die Widgets und die fürs 
Frontend und die Executors und 

1266
00:59:24,240 --> 00:59:26,840
AKA Functions fürs Backend. 
Und jetzt gibt es halt noch die 

1267
00:59:26,840 --> 00:59:28,840
App. 
Als Instanz, weil wir haben ja 

1268
00:59:28,840 --> 00:59:30,880
verschiedene Apps. 
Ja, du kannst ja bei uns 12 5070

1269
00:59:30,880 --> 00:59:34,800
Apps machen und die Apps 
beinhalten quasi n Haufen 

1270
00:59:35,000 --> 00:59:37,880
Widgets und n Haufen executors. 
Ja und in den Apps sind so 

1271
00:59:37,880 --> 00:59:39,920
Einstellungen drinne wie wie 
viele Pages hast du, welche 

1272
00:59:39,920 --> 00:59:42,600
Sprache sollst du nehmen und so 
weiter und sofort hat auch ist 

1273
00:59:42,600 --> 00:59:44,600
auch wieder nur n Haufen 
Konfiguration ja und wird 

1274
00:59:44,600 --> 00:59:48,080
gespeichert als Instanz einer 
App klasse ja so rums und jetzt 

1275
00:59:48,080 --> 00:59:50,560
was haben wir jetzt im Backend 
relativ einfache Klassen und 

1276
00:59:50,560 --> 00:59:53,840
Instanzen davon. 
Und jetzt kommt noch was. 

1277
00:59:53,840 --> 00:59:56,200
Muss man auch zu sagen, zur 
Architektur, was macht man jetzt

1278
00:59:56,200 --> 00:59:57,240
damit? 
Ja, das packst du jetzt in 

1279
00:59:57,240 --> 01:00:00,320
Dockercontainer und da schreibst
du da dran, App Builder Backend,

1280
01:00:00,320 --> 01:00:03,040
ja das ist unser App Builder 
Backend dockercontainer ja darin

1281
01:00:03,040 --> 01:00:05,440
läuft das alles, dann haben wir 
haben wir schon das sauber 

1282
01:00:05,440 --> 01:00:08,280
gemacht und jetzt muss man sich 
aber noch kurz überlegen warte 

1283
01:00:08,280 --> 01:00:12,120
mal wir haben ja ne saas 
Software also das ist das Kacke 

1284
01:00:12,120 --> 01:00:15,840
wenn wir wenn wir das alles in 
einem Container haben weil Der 

1285
01:00:15,840 --> 01:00:18,400
Gerrit macht sich bei uns n 
Account Demo Punkt heisenware 

1286
01:00:18,400 --> 01:00:21,320
Punkt Cloud und darin sind alle 
seine Apps und alle seine Haufen

1287
01:00:21,320 --> 01:00:24,400
Widgets und Executors und so 
weiter und das gefälligst nur 

1288
01:00:24,400 --> 01:00:27,000
für Gerrit. 
Ja das ist jetzt wieder 

1289
01:00:27,000 --> 01:00:29,720
encapulation ne eben gerade 
waren wir noch innerhalb der 

1290
01:00:29,720 --> 01:00:33,040
Instanz, dass wir quasi die die 
Calls quasi encapulaten, jetzt 

1291
01:00:33,040 --> 01:00:36,400
geht es quasi darum, wer nutzt 
quasi diese ganze Plattform, wem

1292
01:00:36,400 --> 01:00:39,280
gehört der Sub Account? 
Ja und das lösen wir indem wir 

1293
01:00:39,280 --> 01:00:41,920
komplett die Container quasi 
bauen, es gibt nämlich ein. 

1294
01:00:42,240 --> 01:00:45,800
Ein App Back End Container nur 
für den Garet beziehungsweise 

1295
01:00:45,800 --> 01:00:49,560
genauer nur für den Account Demo
ja den den der Garet vielleicht 

1296
01:00:49,560 --> 01:00:52,640
gemacht hat. 
Ja und für den Account Your 

1297
01:00:52,640 --> 01:00:55,840
Company Punkt Heisen Wer dort 
Cloud gibt es n komplett eigenen

1298
01:00:55,840 --> 01:00:58,120
Container. 
Ja und das ist das nächste 

1299
01:00:58,120 --> 01:01:01,920
architekturelle Ding während wir
n paar Container haben die immer

1300
01:01:01,920 --> 01:01:05,680
da sind für alle die sich quasi 
Last teilen also zum Beispiel 

1301
01:01:05,680 --> 01:01:09,480
authentification und so weiter 
entsteht für jeden unseren 

1302
01:01:09,480 --> 01:01:11,520
Accounts garet hat gesagt ihr 
könnt es ja mal ausprobieren. 

1303
01:01:12,040 --> 01:01:14,040
Und wenn ihr das ausprobiert, 
wenn ihr tatsächlich n Account 

1304
01:01:14,040 --> 01:01:16,600
anlegt, dann entsteht im 
Hintergrund in unserem Backend n

1305
01:01:16,600 --> 01:01:19,360
ganzer Satz 12345678 vielleicht 
8 neue Container ja, und einer 

1306
01:01:19,360 --> 01:01:23,200
davon ist das App Bilder 
Backend, von dem ich lange 

1307
01:01:23,240 --> 01:01:26,520
gesprochen hab, wo die ganzen 
Widgets und so weiter drin sind,

1308
01:01:26,520 --> 01:01:28,720
der entsteht quasi nur für euch 
an diesem Account. 

1309
01:01:28,720 --> 01:01:30,480
Ja und damit ist alles 
vollständig isoliert. 

1310
01:01:30,480 --> 01:01:35,520
Ja und das ist jetzt auch wieder
architektonisch, da gehen wir 

1311
01:01:35,520 --> 01:01:37,760
jetzt aber schnell rüber, wir 
lösen das, dann muss man das 

1312
01:01:37,760 --> 01:01:40,160
Wissen, ist auch wenn man das 
weiß ist das n cooler Trick. 

1313
01:01:41,920 --> 01:01:44,560
Wie kann man das jetzt machen? 
Dynamisch Container hä in einer 

1314
01:01:44,560 --> 01:01:46,840
Anwendung die deployed ist? 
Ich muss da nix neu deployed, 

1315
01:01:46,840 --> 01:01:50,000
ist also Runtime bei uns in der 
Plattform und wir haben ein 

1316
01:01:50,000 --> 01:01:52,800
Modul das ist wieder nen 
Container, das ist einer der für

1317
01:01:52,800 --> 01:01:55,120
der aber immer der gibt es quasi
nur einmal. 

1318
01:01:55,440 --> 01:01:59,200
Das ist der sogenannte Container
Manager oder Docker Manager, 

1319
01:01:59,680 --> 01:02:03,480
dessen Aufgabe ist quasi on the 
Fly on request neue Container 

1320
01:02:03,480 --> 01:02:06,080
herzustellen, sozusagen hab ich 
noch nie gehört, das kenn ich ja

1321
01:02:06,080 --> 01:02:08,880
nicht wieso ihr habt doch Docker
compost und so weiter ja. 

1322
01:02:09,040 --> 01:02:10,520
Gibt es auch. 
Das ist der Standardweg. 

1323
01:02:10,520 --> 01:02:14,640
Aber man muss wissen, Docker 
selber ist halt nen nen Demon, 

1324
01:02:14,880 --> 01:02:17,920
ein ein Demon, also ein eine 
laufende, ein laufender Server 

1325
01:02:17,920 --> 01:02:20,320
vom Betriebssystem quasi. 
Das ist auch wieder nur ein 

1326
01:02:20,320 --> 01:02:23,560
Server mit Rest API und Du 
kannst halt innerhalb in der 

1327
01:02:23,560 --> 01:02:26,720
Runtime kannst du diese Rest API
sagen, zieh mir einen neuen 

1328
01:02:26,720 --> 01:02:29,520
Container hoch, tatsächlich ist 
es sogar so, dass die Docker 

1329
01:02:29,520 --> 01:02:32,640
Kommandozeile, die man so kennt 
mit Docker Compose ab oder 

1330
01:02:32,640 --> 01:02:34,400
Docker run und so weiter das 
kennen alle die ein bisschen 

1331
01:02:34,400 --> 01:02:37,440
Docker machen ist nichts anderes
als ein Rapper. 

1332
01:02:38,080 --> 01:02:40,640
Für einen Klienten, der mit 
diesem Demon spricht, ja, das 

1333
01:02:40,640 --> 01:02:43,880
ist ne Client Server Rest API 
Architektur und wir sprechen von

1334
01:02:43,880 --> 01:02:47,200
innen heraus mit dieser API und 
können quasi in Runtime unserer 

1335
01:02:47,200 --> 01:02:49,840
Plattform dockercontainer runter
und hochfahren wie es uns 

1336
01:02:49,840 --> 01:02:52,880
beliebt. 
Ja das löst unsere MIT Tendency 

1337
01:02:52,880 --> 01:02:56,160
quasi auf Account Ebene ja das 
wird in Dockercontainern quasi 

1338
01:02:56,160 --> 01:02:59,680
abgebildet genau und Gerrit hat 
schon gesagt Erwähn doch noch 

1339
01:02:59,680 --> 01:03:02,080
mal was sie sonst noch so haben 
genau dann jetzt haben wir quasi

1340
01:03:02,080 --> 01:03:04,080
und das das mach ich n bisschen 
kürzer weil das andere auch so 

1341
01:03:04,080 --> 01:03:07,160
machen das ist Best practice. 
Wir haben halt n ganzen Satz an 

1342
01:03:07,160 --> 01:03:09,120
Dockercontainern mit 
verschiedenen Funktionalitäten. 

1343
01:03:09,120 --> 01:03:11,760
Also wir haben zum Beispiel 
einen wo ne postpress Datenbank 

1344
01:03:11,760 --> 01:03:14,000
drin läuft, wir haben einen, da 
läuft ne Influx Time Series 

1345
01:03:14,000 --> 01:03:17,040
Datenbank und auch diese sind 
quasi pro Account generiert. 

1346
01:03:17,040 --> 01:03:19,600
Ja es gibt ja quasi ganz viele 
postpress Datenbanken für jeden 

1347
01:03:19,600 --> 01:03:22,720
Account ein und und dann haben 
wir noch n Container da, da 

1348
01:03:22,720 --> 01:03:25,360
läuft n Media Server drin damit 
ihr eure Files und so weiter 

1349
01:03:25,360 --> 01:03:28,080
verwalten könnt und so weiter so
n ganzes Set ja und die die 

1350
01:03:28,080 --> 01:03:31,280
können alle miteinander sprechen
weil die sich ein im Docker ein 

1351
01:03:31,280 --> 01:03:34,080
Dockernetzwerk quasi teilen. 
Und die können auch miteinander 

1352
01:03:34,080 --> 01:03:36,840
Files austauschen, weil wir da 
mit den Volumes arbeiten und man

1353
01:03:36,840 --> 01:03:39,080
kann nämlich auch wissen, man 
kann Docker Volumes in 

1354
01:03:39,080 --> 01:03:41,520
verschiedene Container Mountain,
die gucken quasi alle auf das 

1355
01:03:41,520 --> 01:03:45,000
gleiche Filesystem. 
Ja und die Volumes übrigens sind

1356
01:03:45,000 --> 01:03:47,840
bei uns auch Key um zu 
persistieren, davon hab ich 

1357
01:03:47,840 --> 01:03:50,320
nämlich noch nicht gesprochen, 
es muss ja auch so sein, dass 

1358
01:03:50,640 --> 01:03:53,120
wir machen ja ganz ganz viel 
Updates oder die Maschine geht 

1359
01:03:53,120 --> 01:03:55,240
mal aus, der Server startet neu 
und so und dann darf ja nicht 

1360
01:03:55,240 --> 01:03:59,760
alles weg sein, das funktioniert
so, dass wir zu jederzeit das 

1361
01:03:59,760 --> 01:04:01,200
auch krass, das sag ich noch mal
also. 

1362
01:04:01,360 --> 01:04:04,480
Immer bei der kleinsten Änderung
von der UI ist also wenn der 

1363
01:04:04,480 --> 01:04:08,480
Gerrit zum Beispiel sagt Min 
Doppelpunkt 1 von 0 auf 1 

1364
01:04:08,480 --> 01:04:11,040
gesetzt das Argument weil er 
dann ne Rente am Ende das von 1 

1365
01:04:11,040 --> 01:04:13,840
bis 100 nicht von 0 bis 100 
machen will, dann verändert er 

1366
01:04:13,840 --> 01:04:17,040
ja eine eine Konfiguration des 
unterliegenden executor Instanz.

1367
01:04:18,480 --> 01:04:21,320
Und das wird sofort persistiert.
Das geht sofort in den Docker 

1368
01:04:21,320 --> 01:04:24,400
Volume auf die Disc, als Jason 
flach hingedonnert wir haben 

1369
01:04:24,400 --> 01:04:26,840
nutzen keine Datenbank, wir 
benutzen keine relationale 

1370
01:04:26,840 --> 01:04:29,040
Datenbank, hab ich mich dagegen 
entschieden, weil die weil die 

1371
01:04:29,040 --> 01:04:32,280
Funktionen sind keine 
relationalen, ich brauch keine 

1372
01:04:32,280 --> 01:04:34,560
relationalen Anfragen darauf, 
wir brauchen n extrem hohen 

1373
01:04:34,560 --> 01:04:37,040
Speed und ich Klatsch das 
einfach auf die Platte, aber 

1374
01:04:37,040 --> 01:04:39,040
nicht einfach irgendwo auf die 
Platte sondern in ein Docker 

1375
01:04:39,040 --> 01:04:42,360
Volume was dazu gehört und das 
Docker Volume, das ist Docker 

1376
01:04:42,360 --> 01:04:44,000
Technologie persistiert mir das 
schon hin. 

1377
01:04:44,400 --> 01:04:45,880
Und jetzt ist noch 
einspringender Punkt. 

1378
01:04:45,880 --> 01:04:48,080
Was wir können ist halt wenn die
Plattform unten ist und wenn wir

1379
01:04:48,080 --> 01:04:51,440
neu starten, das haben wir von 
vornherein designed, können wir 

1380
01:04:51,440 --> 01:04:53,360
quasi die Instanzen. 
Ich hab ja gesagt wir können 

1381
01:04:53,360 --> 01:04:57,520
Instanzen auch erzeugen und 
managen von der persistierten 

1382
01:04:57,520 --> 01:05:00,240
Information auf der Platte 
erzeugen wir rückwärts beim 

1383
01:05:00,240 --> 01:05:03,240
Starten die Instanzen wieder in 
die entstehen einfach ja das 

1384
01:05:03,240 --> 01:05:06,840
Macht uns unser unser Backend 
quasi ihr seht dann einmal kurz 

1385
01:05:06,840 --> 01:05:09,440
grau und dann ist wieder grün 
alles da und ich hab das ganze 

1386
01:05:09,440 --> 01:05:11,040
System neu gestartet oder was 
also? 

1387
01:05:11,520 --> 01:05:14,160
Unglaubliche Vesilient ja, 
powercycles und so weiter es 

1388
01:05:14,160 --> 01:05:16,400
kann nie irgendwas passieren. 
Ja es braucht manchmal ab was n 

1389
01:05:16,400 --> 01:05:17,920
komplexes System ist. 
Irgendwie ist das nicht 

1390
01:05:17,920 --> 01:05:19,920
aufgehangen an der UI, man kann 
nicht zu jederzeit irgendwie 

1391
01:05:19,920 --> 01:05:22,320
represh drücken, dann kannst du 
jederzeit den Computer an und 

1392
01:05:22,320 --> 01:05:24,080
ausschalten, das kannst du 
Docker Runterschmeißen 

1393
01:05:24,080 --> 01:05:27,200
hochschmeißen kann nie was 
passieren ne ist alles ist alles

1394
01:05:27,200 --> 01:05:30,160
in sich flüssig und in Volumes 
aufgehoben ne die ganzen 

1395
01:05:30,160 --> 01:05:32,640
Datenbanken auch ja die 
Datenbanken das ist immer n 

1396
01:05:32,640 --> 01:05:34,840
Riesenproblem Migration von 
Datenbanken haben wir nicht wenn

1397
01:05:34,840 --> 01:05:37,480
wir die Datenbanken auch in den 
Volume persistieren dann gehen 

1398
01:05:37,480 --> 01:05:39,320
die halt runter und dann kommen 
die wieder hoch und alles ist 

1399
01:05:39,320 --> 01:05:40,960
safe ja da muss man nicht drüber
nachdenken. 

1400
01:05:41,160 --> 01:05:42,840
Vielleicht müssen wir noch 
erwähnen, dass die Datenbanken, 

1401
01:05:42,840 --> 01:05:45,760
die drin sind, nicht für die 
Heisenware PC benötigt werden, 

1402
01:05:45,760 --> 01:05:48,920
sondern Ressourcen sind, die die
Nutzer benutzen können, um 

1403
01:05:48,920 --> 01:05:51,520
wieder abzubauen und und danke 
die Daten abzulegen. 

1404
01:05:51,920 --> 01:05:53,160
Ja, genau, und dann und dann 
haben. 

1405
01:05:53,160 --> 01:05:56,160
Dann haben wir quasi im Backend 
ganz viele Container jetzt, 

1406
01:05:56,160 --> 01:05:58,800
jetzt würden die, die die Leute 
die sowas machen, die Fragen 

1407
01:05:58,800 --> 01:06:01,200
jetzt ja hä und wie Teil ich das
auf, also wir haben noch n als 

1408
01:06:01,200 --> 01:06:03,920
Komponenten reverse Proxy, das 
ist quasi daheim da wie. 

1409
01:06:04,640 --> 01:06:07,200
Die Leute, die Tor kennen mit 
dem Hammer, die wissen, dass der

1410
01:06:07,200 --> 01:06:10,320
Heim da quasi die Welt schützt, 
bevor man da hinkommt. 

1411
01:06:10,320 --> 01:06:12,800
Das ist darüber das Proxy, der 
der, das ist quasi der Kontakt 

1412
01:06:12,800 --> 01:06:15,600
nach außen, der macht das ganze 
SSL Termination Krams, das auch 

1413
01:06:15,600 --> 01:06:19,680
nur einmal machen, der hält auch
das das SSL Zertifikat von der 

1414
01:06:19,680 --> 01:06:23,680
Heisenware und der hält es auch 
für unseren internen MQTT Broker

1415
01:06:23,800 --> 01:06:27,120
ist auch ganz schick und darüber
kommt alles rein und raus wir 

1416
01:06:27,120 --> 01:06:30,600
nutzen da Envoy als Technologie.
Weil wir da ja auch nicht auf ne

1417
01:06:30,600 --> 01:06:32,800
Cloud vertrauen können. 
Das hab ich noch nicht gesagt. 

1418
01:06:32,800 --> 01:06:35,120
Wir können ja auch komplett on 
Prem laufen, das heißt wir haben

1419
01:06:35,120 --> 01:06:37,280
alle Module die wir benötigen 
für den vollen Betrieb der 

1420
01:06:37,280 --> 01:06:40,800
Plattform in unseren eigenen 
Docker Containern untergebracht,

1421
01:06:41,120 --> 01:06:43,080
also auch Authentifizierung. 
Es hat noch nicht selbst 

1422
01:06:43,080 --> 01:06:46,640
geschrieben, es gibt Fusion Awes
oder das erlaubt halt quasi es 

1423
01:06:46,640 --> 01:06:49,960
im Docker Container zu betreiben
und und deswegen müssen wir 

1424
01:06:49,960 --> 01:06:52,080
quasi uns auch um unsere Reverse
Boxys kümmern. 

1425
01:06:52,080 --> 01:06:54,080
Wer jetzt nicht weiß was Reverse
Boxy ist, hört die Folge noch 

1426
01:06:54,080 --> 01:06:58,080
mal nach. 
Und und dieser Reverse Proxy ist

1427
01:06:58,080 --> 01:07:00,800
sehr dynamisch und funktioniert 
auch wieder über n Volume. 

1428
01:07:00,880 --> 01:07:04,360
Da ist dann quasi n file drin, 
wo die ganzen Accounts sind und 

1429
01:07:04,360 --> 01:07:06,240
dann macht dann das richtige 
Routing, das ist nämlich 

1430
01:07:06,240 --> 01:07:09,160
wichtig, dass wenn der wenn wenn
da steht Demo Punkt heißen wer 

1431
01:07:09,160 --> 01:07:12,040
dort klaut und der Gerrit Minn 
auf 1 setzt, dass das alles an 

1432
01:07:12,040 --> 01:07:13,600
der richtigen Stelle im 
richtigen Container auf der 

1433
01:07:13,600 --> 01:07:16,200
richtigen Instanz ankommt. 
Ja und zusammen ist das n 

1434
01:07:16,200 --> 01:07:20,800
ziemlich großes Bild und aber ja
beschreibt so n ganz bisschen 

1435
01:07:20,800 --> 01:07:23,040
top Level. 
Wie unsere Architektur aussieht?

1436
01:07:23,040 --> 01:07:25,360
Ja, jetzt komm ich so langsam 
auch zum Ende. 

1437
01:07:25,440 --> 01:07:27,880
Also man könnte sagen, am Ende 
des Tages, ich hab sogar hier 

1438
01:07:27,880 --> 01:07:30,160
hingeschrieben auf meinen 
Spicker am Ende des Tages ja 

1439
01:07:30,400 --> 01:07:35,920
haben wir quasi, bauen wir quasi
im App Bilder konfigurieren wir 

1440
01:07:35,920 --> 01:07:38,880
fast noch besser gesagt im App 
Bilder Instanzen die im Backend 

1441
01:07:38,880 --> 01:07:41,920
entstehen, das heißt durch 
konfiguriert wird auch nie Code 

1442
01:07:42,000 --> 01:07:43,480
generiert, das muss man auch 
noch mal sagen. 

1443
01:07:43,480 --> 01:07:45,520
Ja wir haben eine No Code 
Plattform, die besteht aus. 

1444
01:07:46,160 --> 01:07:48,440
Fertig geprüften Instanzen, 
nirgendwo wird irgendwas 

1445
01:07:48,440 --> 01:07:51,120
generiert, da ist alles vorher 
durchdachter, es wird nur noch 

1446
01:07:51,120 --> 01:07:54,920
durchkonfiguriert, ja dann wird 
das Persistiert was ich gebaut 

1447
01:07:54,920 --> 01:07:57,600
hab in in Volumes hab ich gesagt
und wenn ich deploy drücke 

1448
01:07:57,600 --> 01:08:00,080
passiert eigentlich nichts 
anderes als dass ich kopiere, 

1449
01:08:00,240 --> 01:08:03,320
ich nehm diese ganzen Jason 
Files kopier die in den zweiten 

1450
01:08:03,320 --> 01:08:05,440
Container den ich 
produktionscontainer nenne, der 

1451
01:08:05,440 --> 01:08:07,920
sieht aber eigentlich aus wie 
der Bildercontainer, ist halt 

1452
01:08:07,920 --> 01:08:10,080
einfach nur der der geschützt 
ist für die Produktion ja. 

1453
01:08:10,600 --> 01:08:13,120
Und dann hab ich noch n zweites 
UI Backend was was nicht das 

1454
01:08:13,120 --> 01:08:14,800
ganze Gebaue macht. 
Das geht quasi nur. 

1455
01:08:14,880 --> 01:08:17,720
Zeigt mir an welche Widgets wo 
sind die und welche Executors 

1456
01:08:17,720 --> 01:08:20,160
werden bedient und los geht es 
ja, das ist ganz dünn 

1457
01:08:20,160 --> 01:08:25,200
krasserweise ist das da die rect
Applikation über alle Apps 

1458
01:08:25,200 --> 01:08:28,240
hinweg die sich alle unsere User
ausdecken oder wir selber exakt 

1459
01:08:28,240 --> 01:08:31,359
die gleiche ja ist die gleiche 
UI Anwendung ja und die ist sehr

1460
01:08:31,359 --> 01:08:35,000
klein weil der gesamte Inhalt 
von der UI aus dem Backend 

1461
01:08:35,000 --> 01:08:38,000
geladen wird ja da gibt es n 
Namen für den ich die gerade 

1462
01:08:38,000 --> 01:08:39,200
nicht auf der Platte hab 
irgendwie. 

1463
01:08:39,520 --> 01:08:41,960
Fondant as the backend oder 
irgendsowas nee, weiß ich nicht,

1464
01:08:41,960 --> 01:08:45,279
also ja, aber ihr wisst wohl was
ich meine, quasi die Ganze, das 

1465
01:08:45,279 --> 01:08:47,760
ganze Rendering und so weiter 
ist quasi alles nicht das 

1466
01:08:47,760 --> 01:08:50,319
Rendering Rendert, rendert wird 
tatsächlich noch im Client, aber

1467
01:08:50,319 --> 01:08:53,600
die Konfiguration und welche 
Widgets wohin kommen liegt alles

1468
01:08:53,600 --> 01:08:55,319
im Backend. 
Ja und das ist dann ziemlich 

1469
01:08:55,319 --> 01:08:59,359
elegant und lässt uns das 
managen, dass wir quasi ja 

1470
01:08:59,439 --> 01:09:02,240
relativ überschaubaren Code 
haben bei ganz flexiblen 

1471
01:09:02,240 --> 01:09:04,399
verschiedenen Apps die unsere 
User machen können. 

1472
01:09:04,399 --> 01:09:07,840
Ja so funktioniert das ja so, 
jetzt bin ich irgendwie hab ich 

1473
01:09:07,840 --> 01:09:10,279
mich zu Tode geredet. 
Ich sag das nochmal. 

1474
01:09:11,680 --> 01:09:14,319
Ich würde sagen, auf jeden Fall 
eine würdige Folge 100. 

1475
01:09:14,319 --> 01:09:17,560
Ich fand es fast studierend. 
Ja, jetzt fällt das alles so 

1476
01:09:17,560 --> 01:09:18,720
ineinander. 
So, das klingt alles sehr 

1477
01:09:18,720 --> 01:09:21,120
schlüssig. 
War dir das alles vorher klar 

1478
01:09:21,760 --> 01:09:23,279
oder ist das Iterativ 
entstanden? 

1479
01:09:23,520 --> 01:09:26,439
Nee, tatsächlich war war mir das
Recht klar und mir ist auch 

1480
01:09:26,439 --> 01:09:29,800
relativ klar, wie es weitergeht.
Ja, mein Problem ist ja immer, 

1481
01:09:29,800 --> 01:09:31,399
dass ich das zwar im Kopf hab, 
aber nicht so schnell 

1482
01:09:31,399 --> 01:09:33,640
hinterherkomme mit dem Ganzen 
entwickeln und so weiter also 

1483
01:09:33,640 --> 01:09:35,800
diese Grundzüge dieser 
Architektur war mir relativ 

1484
01:09:35,800 --> 01:09:38,479
klar, muss man sagen, ja das. 
Das kann man auch nicht so oft 

1485
01:09:38,479 --> 01:09:41,439
hin und her düdeln so, ja wie 
man es dann technisch umsetzt 

1486
01:09:41,439 --> 01:09:43,240
und dass das, wie zum Beispiel 
die ganze Mandantenfähigkeit, 

1487
01:09:43,240 --> 01:09:46,240
bis man das so hat, sag ich mal.
Ja, das ist n anderes Thema, 

1488
01:09:46,240 --> 01:09:49,240
aber dass ich es so aufsetzen 
will, das hab ich mir vorher 

1489
01:09:49,240 --> 01:09:51,160
überlegt, aber das ist auch 
schon mal, muss sagen 

1490
01:09:51,160 --> 01:09:54,640
fairerweise, ich hab das ist 
schon der dritte Versuch, 

1491
01:09:54,880 --> 01:09:57,040
versuche sie nicht, aber die 
dritte Realisierung dieses 

1492
01:09:57,040 --> 01:09:59,080
Problems, die ich in meinem 
Leben geschrieben hab, also ich 

1493
01:09:59,080 --> 01:10:00,560
hab dreimal auf der grünen 
Wiese. 

1494
01:10:00,880 --> 01:10:03,320
Die Chance gehabt, das muss man 
auch sagen, das hat ja, das hat 

1495
01:10:03,320 --> 01:10:06,000
man nicht so oft, ein 
generisches Softwareprodukt zu 

1496
01:10:06,000 --> 01:10:07,760
schreiben, das hat mit der 
Promotion angefangen, da haben 

1497
01:10:07,760 --> 01:10:09,920
wir Bildverarbeitung auch mit 
solchen Dingern gemacht, ist 

1498
01:10:09,920 --> 01:10:12,880
weiter gegangen mit der mit der 
Anwendung ne Skala Anwendung, 

1499
01:10:12,880 --> 01:10:14,800
die ich geschrieben hab, die 
sehr flexibel sein musste und 

1500
01:10:14,800 --> 01:10:19,600
ähnliche Features hatte für den 
für den europäischen Laser und 

1501
01:10:19,840 --> 01:10:23,200
mündet quasi jetzt als mal als 
mein finales Meisterstück, sag 

1502
01:10:23,200 --> 01:10:26,080
ich mal in einer Low Code 
Anwendung, die jetzt tatsächlich

1503
01:10:26,080 --> 01:10:29,040
versucht auf dem Level. 
Der Software selber irgendwie n 

1504
01:10:29,040 --> 01:10:31,920
attraktionslevel hochzugeben ja,
das hätte ich jetzt im ersten 

1505
01:10:31,920 --> 01:10:34,080
Schuss auch nicht so geschafft. 
Also ich hab aber diese diese 

1506
01:10:34,080 --> 01:10:36,160
Architektur und diese Probleme 
hab ich halt schon in meinem 

1507
01:10:36,160 --> 01:10:39,520
Leben Ach 20 Jahre hin und her 
gewütet und alles Mögliche 

1508
01:10:39,520 --> 01:10:43,200
ausprobiert und das ist jetzt 
quasi der The Final try aber ich

1509
01:10:43,200 --> 01:10:45,360
würde sagen hat geklappt da 
jetzt bin ich relativ zufrieden 

1510
01:10:45,360 --> 01:10:47,200
mit dem was da rausgekommen ist.
Ja Mhm das kann. 

1511
01:10:47,720 --> 01:10:50,920
Ich natürlich streichen, das ist
läuft, das funktioniert, man 

1512
01:10:50,920 --> 01:10:53,040
muss gar nicht immer wissen, was
alles so drunter steckt, das 

1513
01:10:53,040 --> 01:10:56,360
könnte auch verwirren, aber. 
Das kann auch dazu führen, dass 

1514
01:10:56,360 --> 01:10:57,880
man nicht so gut schlafen kann 
manchmal. 

1515
01:11:00,720 --> 01:11:04,480
Ja, aber es ist beeindruckend. 
OK, dann, dann lassen wir es 

1516
01:11:04,480 --> 01:11:08,080
dabei Burkhard und würd ich 
sagen, war ne coole Folge 100 

1517
01:11:08,080 --> 01:11:10,920
war n richtig tiefer Einblick in
die heisenware ich würd sagen 

1518
01:11:10,920 --> 01:11:13,760
wenn wenn irgendwer dazu fragen 
hat oder tief was in Tasse oder 

1519
01:11:13,760 --> 01:11:15,600
so, dann dann sollen sie dich 
anhauen oder? 

1520
01:11:15,600 --> 01:11:17,680
Sollen sie mich anhauen? 
Wir haben auch tatsächlich, also

1521
01:11:17,680 --> 01:11:20,160
wir sind ja so Bolt ne und ich, 
ich weiß nicht ob das jede Firma

1522
01:11:20,160 --> 01:11:22,400
macht die die die innerste 
Architektur nach außen zu 

1523
01:11:22,400 --> 01:11:24,560
kehren. 
Wir machen das, weil ich finde, 

1524
01:11:24,560 --> 01:11:26,360
das das muss man auch mal 
teilen, auch für andere 

1525
01:11:26,360 --> 01:11:28,400
Architekten. 
Ich find das immer interessant, 

1526
01:11:28,480 --> 01:11:30,640
wenn ich die Gelegenheit hab, 
mal große Architekturen zu 

1527
01:11:30,640 --> 01:11:32,800
verstehen, von anderen find ich 
das auch toll und wir haben es 

1528
01:11:32,800 --> 01:11:34,720
sogar auch dokumentiert. 
Also ihr könnt bei uns auf 

1529
01:11:34,720 --> 01:11:38,240
docs.heisenwer.com gehen, da 
gibt es die Developer section 

1530
01:11:38,480 --> 01:11:41,760
wer da so tief einsteigen will, 
da steht relativ viel von dem 

1531
01:11:41,760 --> 01:11:44,240
was ich gesagt hab auch noch mal
Verschriftlicht und Verbildlicht

1532
01:11:44,240 --> 01:11:46,960
vor allen Dingen da, da kann man
sich noch mal reinziehen, ja und

1533
01:11:46,960 --> 01:11:49,800
ansonsten natürlich gar nicht 
bin wenn ich Zeit hab das war n 

1534
01:11:49,800 --> 01:11:52,080
größtes Problem beantworte ich 
natürlich auch alles mögliche 

1535
01:11:52,080 --> 01:11:55,600
Anfragen ne. 
Cool, dann möchte ich noch 2 

1536
01:11:55,600 --> 01:11:58,120
Dinge sagen. 
Nummer 1 wir suchen einen 

1537
01:11:58,120 --> 01:12:02,160
Solutions engineer das heißt, 
Wer Lust hat mit uns gemeinsam 

1538
01:12:02,480 --> 01:12:05,480
und unseren Kunden und Partnern 
gemeinsam ja auch Apps und 

1539
01:12:05,480 --> 01:12:09,120
Lösungen umzusetzen, mit der 
Heiseware mit unserem Produkt, 

1540
01:12:09,600 --> 01:12:12,000
der darf sich gern bewerben. 
Die Ausschreibung findet man auf

1541
01:12:12,000 --> 01:12:16,080
unserer Website unter dem Punkt 
Karriere oder Jobs, je nachdem 

1542
01:12:16,240 --> 01:12:19,360
auf Deutsch oder Englisch freuen
wir uns auf Bewerbungen und ich 

1543
01:12:19,440 --> 01:12:21,600
würde sagen, ich freue mich auf 
die nächsten 100 folgen. 

1544
01:12:22,960 --> 01:12:27,400
Dir, Burkhard mit coolen Gästen 
und ja, bin gespannt, was alles 

1545
01:12:27,400 --> 01:12:30,400
noch so auf uns zukommt. 
Cool, das war n guter Abschluss 

1546
01:12:30,400 --> 01:12:31,840
Gerd, dazu hab ich nichts 
hinzuzufügen. 

1547
01:12:31,840 --> 01:12:34,800
Ich freu mich, dass wir schon 
die Hörer 100 Folgen lang 

1548
01:12:34,800 --> 01:12:37,280
begeistern konnten, dass es 
immer noch Interesse gibt und es

1549
01:12:37,280 --> 01:12:39,400
auch noch wächst. 
Ja, das ist schön und solange 

1550
01:12:39,400 --> 01:12:42,240
das so ist, hab ich ganz viel 
Spaß und Motivation daran das 

1551
01:12:42,240 --> 01:12:45,040
weiterzumachen, auch wenn 
natürlich der Teppich der der 

1552
01:12:45,040 --> 01:12:47,560
Tee n bisschen dünner wird aber 
und ich mich mehr vorbereiten 

1553
01:12:47,560 --> 01:12:49,680
muss aber well, das nehm ich 
dann auch in Kauf. 

1554
01:12:50,560 --> 01:12:52,680
Ich bin. 
Fest davon überzeugt, wir werden

1555
01:12:52,680 --> 01:12:54,840
noch viel finden. 
Ja cool, Leute, dann, wer uns 

1556
01:12:54,840 --> 01:12:57,440
jetzt schon vor Silvester hört 
dem noch n guten Rutsch und n 

1557
01:12:57,440 --> 01:13:01,360
guten Start ins neue Jahr 2026 
sowieso alles Gute für euch und 

1558
01:13:01,360 --> 01:13:03,280
wir hören uns nächstes Jahr 
wieder bis dann ciao ciao. 

1559
01:13:04,200 --> 01:13:05,520
Wünsch ich auch. 
Tschüss aus Hamburg. 

1560
01:13:06,480 --> 01:13:09,840
Einfach komplex wird produziert 
und präsentiert von Heisenware. 

1561
01:13:10,080 --> 01:13:13,120
Heisenware ist deine Low Coop 
Plattform zur Erstellung und zum

1562
01:13:13,120 --> 01:13:15,680
Betrieb interaktiver Apps rund 
um den Shopfloor. 

1563
01:13:15,760 --> 01:13:19,280
Starte noch heute deinen Free 
Trial unterheisenware.com slash 

1564
01:13:19,280 --> 01:13:20,800
einfach minus komplex.
