WEBVTT

1
00:00:02.965 --> 00:00:04.735
<00:00:02.965>Okay, <00:00:03.198>so <00:00:03.431>a <00:00:03.665>little <00:00:03.898>bit <00:00:04.131>about <00:00:04.365>me.

2
00:00:04.895 --> 00:00:08.215
<00:00:04.895>I <00:00:05.050>did <00:00:05.206>my <00:00:05.361>computer <00:00:05.517>master's <00:00:05.672>in <00:00:05.828>computer <00:00:05.983>science <00:00:06.139>in <00:00:06.295>2013,

3
00:00:08.275 --> 00:00:11.095
<00:00:08.275>and <00:00:08.450>then <00:00:08.625>I <00:00:08.800>started <00:00:08.975>working <00:00:09.150>at <00:00:09.325>Ava <00:00:09.500>in <00:00:09.675>Munich.

4
00:00:11.235 --> 00:00:13.295
<00:00:11.235>And <00:00:11.468>now <00:00:11.701>I'm <00:00:11.934>an <00:00:12.168>expert <00:00:12.401>software <00:00:12.635>engineer,

5
00:00:13.425 --> 00:00:15.215
<00:00:13.425>still <00:00:13.705>working <00:00:13.985>at <00:00:14.265>Ava <00:00:14.545>in <00:00:14.825>Munich

6
00:00:15.275 --> 00:00:17.535
<00:00:15.275>and <00:00:15.475>working <00:00:15.675>on <00:00:15.875>backend <00:00:16.075>stuff, <00:00:16.274>mostly <00:00:16.475>in <00:00:16.675>Java,

7
00:00:17.545 --> 00:00:19.975
<00:00:17.545>which <00:00:17.745>is <00:00:17.945>exactly <00:00:18.145>why <00:00:18.345>I'm, <00:00:18.545>you <00:00:18.745>know, <00:00:18.945>qualified

8
00:00:19.975 --> 00:00:21.175
<00:00:19.975>to <00:00:20.155>talk <00:00:20.335>about <00:00:20.515>the <00:00:20.695>micro <00:00:20.875>node <00:00:21.055>stuff.

9
00:00:22.155 --> 00:00:24.335
<00:00:22.155>So <00:00:22.388>the <00:00:22.621>first <00:00:22.855>thing <00:00:23.088>we <00:00:23.321>are <00:00:23.555>going

10
00:00:24.355 --> 00:00:27.655
<00:00:24.355>to <00:00:24.530>ask <00:00:24.705>is <00:00:24.880>why <00:00:25.055>are <00:00:25.230>we <00:00:25.405>using <00:00:25.580>the <00:00:25.755>cloud?

11
00:00:27.915 --> 00:00:31.415
<00:00:27.915>And <00:00:28.148>there <00:00:28.381>are <00:00:28.615>more <00:00:28.848>than <00:00:29.081>enough <00:00:29.314>reasons,

12
00:00:31.635 --> 00:00:35.215
<00:00:31.635>but, <00:00:31.810>uh, <00:00:31.985>two <00:00:32.160>big <00:00:32.335>reasons <00:00:32.510>are, <00:00:32.685>um, <00:00:32.860>the <00:00:33.035>cost.

13
00:00:35.435 --> 00:00:37.255
<00:00:35.435>So <00:00:35.635>we <00:00:35.835>are <00:00:36.035>migrating <00:00:36.235>stuff <00:00:36.435>to <00:00:36.635>the <00:00:36.835>cloud

14
00:00:37.255 --> 00:00:40.295
<00:00:37.255>because <00:00:37.455>then <00:00:37.655>we <00:00:37.855>can, <00:00:38.055>for <00:00:38.255>example, <00:00:38.455>scale <00:00:38.655>elasticity.

15
00:00:40.355 --> 00:00:42.935
<00:00:40.355>We <00:00:40.495>can <00:00:40.635>scale <00:00:40.775>to <00:00:40.915>zero <00:00:41.055>when <00:00:41.194>we <00:00:41.334>don't <00:00:41.474>need <00:00:41.614>the <00:00:41.754>services

16
00:00:42.955 --> 00:00:45.135
<00:00:42.955>and <00:00:43.110>we <00:00:43.266>can <00:00:43.421>scale <00:00:43.577>up <00:00:43.732>if <00:00:43.888>there <00:00:44.043>is <00:00:44.199>more <00:00:44.355>demand

17
00:00:45.155 --> 00:00:46.655
<00:00:45.155>and <00:00:45.380>we <00:00:45.605>just <00:00:45.830>pay <00:00:46.055>for <00:00:46.280>that <00:00:46.505>demand.

18
00:00:47.275 --> 00:00:50.775
<00:00:47.275>So, <00:00:47.430>um, <00:00:47.586>this <00:00:47.741>is <00:00:47.897>common <00:00:48.052>knowledge, <00:00:48.208>but <00:00:48.363>what's <00:00:48.519>the <00:00:48.675>problem?

19
00:00:50.845 --> 00:00:53.295
<00:00:50.845>When <00:00:51.000>we <00:00:51.156>are <00:00:51.311>riding <00:00:51.467>our <00:00:51.622>services <00:00:51.778>in <00:00:51.933>Java, <00:00:52.089>for <00:00:52.245>example,

20
00:00:53.295 --> 00:00:55.455
<00:00:53.295>in <00:00:53.422>Spring <00:00:53.549>Boot, <00:00:53.676>and, <00:00:53.804>and <00:00:53.931>we <00:00:54.058>are <00:00:54.185>deploying <00:00:54.313>that <00:00:54.440>stuff <00:00:54.567>on <00:00:54.695>our,

21
00:00:55.475 --> 00:00:56.655
<00:00:55.475>for <00:00:55.829>example, <00:00:56.183>Kubernetes <00:00:56.537>classes.

22
00:00:58.355 --> 00:01:00.375
<00:00:58.355>So <00:00:58.588>one <00:00:58.821>of <00:00:59.055>the <00:00:59.288>problems <00:00:59.521>is, <00:00:59.754>um,

23
00:01:00.395 --> 00:01:02.735
<00:01:00.395>if <00:01:00.511>you <00:01:00.628>take <00:01:00.745>a <00:01:00.861>look <00:01:00.978>at <00:01:01.095>the <00:01:01.211>log <00:01:01.328>files <00:01:01.445>when <00:01:01.561>they <00:01:01.678>are <00:01:01.795>starting

24
00:01:02.795 --> 00:01:05.055
<00:01:02.795>up, <00:01:02.970>you'll <00:01:03.145>see <00:01:03.320>it <00:01:03.495>started <00:01:03.670>in <00:01:03.845>like <00:01:04.019>30 <00:01:04.195>seconds,

25
00:01:05.075 --> 00:01:07.935
<00:01:05.075>or <00:01:05.250>it <00:01:05.425>started <00:01:05.600>in <00:01:05.775>27 <00:01:05.950>seconds <00:01:06.125>and <00:01:06.300>27 <00:01:06.475>seconds.

26
00:01:08.035 --> 00:01:10.135
<00:01:08.035>If <00:01:08.175>you <00:01:08.315>want <00:01:08.455>to <00:01:08.595>skate <00:01:08.735>to <00:01:08.875>zero <00:01:09.015>is <00:01:09.155>a <00:01:09.295>real <00:01:09.435>problem

27
00:01:10.135 --> 00:01:14.375
<00:01:10.135>because <00:01:10.275>then <00:01:10.415>your <00:01:10.555>customer <00:01:10.695>has <00:01:10.835>to <00:01:10.975>wait <00:01:11.115>for <00:01:11.255>27 <00:01:11.395>seconds <00:01:11.535>to,

28
00:01:15.035 --> 00:01:18.655
<00:01:15.035>uh, <00:01:15.175>to <00:01:15.315>get <00:01:15.455>the <00:01:15.595>first <00:01:15.735>request <00:01:15.875>to <00:01:16.015>get <00:01:16.155>this <00:01:16.295>request <00:01:16.435>served.

29
00:01:18.675 --> 00:01:23.095
<00:01:18.675>And <00:01:18.791>I <00:01:18.908>bet <00:01:19.024>no <00:01:19.141>one <00:01:19.258>is <00:01:19.375>willing <00:01:19.491>to, <00:01:19.608>to <00:01:19.725>wait <00:01:19.841>27 <00:01:19.958>seconds, <00:01:20.075>uh,

30
00:01:23.105 --> 00:01:24.935
<00:01:23.105>until <00:01:23.385>this <00:01:23.665>request <00:01:23.945>is <00:01:24.225>is <00:01:24.505>served.

31
00:01:25.635 --> 00:01:29.455
<00:01:25.635>So <00:01:25.810>therefore, <00:01:25.985>startup <00:01:26.160>times <00:01:26.335>in <00:01:26.510>the <00:01:26.685>cloud <00:01:26.860>actually <00:01:27.035>matter.

32
00:01:29.635 --> 00:01:31.735
<00:01:29.635>If <00:01:29.790>you <00:01:29.946>want <00:01:30.101>to <00:01:30.257>scale <00:01:30.412>to <00:01:30.568>zero, <00:01:30.723>of <00:01:30.879>course <00:01:31.035>you,

33
00:01:31.955 --> 00:01:33.775
<00:01:31.955>you <00:01:32.155>can <00:01:32.355>always <00:01:32.554>scale <00:01:32.755>to, <00:01:32.955>to <00:01:33.155>one <00:01:33.355>part,

34
00:01:33.995 --> 00:01:37.055
<00:01:33.995>but <00:01:34.150>then <00:01:34.306>you <00:01:34.461>are <00:01:34.617>all <00:01:34.772>always <00:01:34.928>paying <00:01:35.083>for <00:01:35.239>that <00:01:35.395>stuff.

35
00:01:39.635 --> 00:01:41.775
<00:01:39.634>The <00:01:39.809>question <00:01:39.984>is <00:01:40.160>why <00:01:40.335>does <00:01:40.509>it <00:01:40.684>take <00:01:40.859>so <00:01:41.035>long

36
00:01:42.075 --> 00:01:44.015
<00:01:42.075>to <00:01:42.308>start <00:01:42.541>a <00:01:42.775>spring <00:01:43.008>boot <00:01:43.241>time, <00:01:43.475>uh,

37
00:01:44.115 --> 00:01:45.415
<00:01:44.115>to <00:01:44.349>start <00:01:44.583>a <00:01:44.817>spring <00:01:45.051>boot <00:01:45.285>service?

38
00:01:45.755 --> 00:01:48.295
<00:01:45.755>Um, <00:01:45.929>common <00:01:46.104>knowledge <00:01:46.280>is, <00:01:46.455>it <00:01:46.630>depends <00:01:46.804>on <00:01:46.979>the <00:01:47.155>number

39
00:01:48.295 --> 00:01:49.695
<00:01:48.295>of <00:01:48.547>beans <00:01:48.798>in <00:01:49.051>the <00:01:49.303>context, <00:01:49.554>okay?

40
00:01:50.235 --> 00:01:53.135
<00:01:50.235>Um, <00:01:50.410>it, <00:01:50.585>it's, <00:01:50.760>uh, <00:01:50.935>spring <00:01:51.110>boot <00:01:51.285>is, <00:01:51.460>is <00:01:51.635>reading

41
00:01:53.195 --> 00:01:54.215
<00:01:53.195>by <00:01:53.500>code <00:01:53.807>on <00:01:54.113>startups.

42
00:01:54.215 --> 00:01:56.015
<00:01:54.215>So <00:01:54.390>if <00:01:54.565>you <00:01:54.740>have <00:01:54.915>big <00:01:55.090>classes, <00:01:55.265>it <00:01:55.440>takes <00:01:55.615>longer,

43
00:01:56.515 --> 00:01:58.015
<00:01:56.515>it <00:01:56.852>creates <00:01:57.190>proxies <00:01:57.527>at <00:01:57.865>runtime.

44
00:01:58.075 --> 00:02:00.135
<00:01:58.075>For <00:01:58.308>example, <00:01:58.541>if <00:01:58.775>you <00:01:59.008>put <00:01:59.241>at <00:01:59.475>cashable

45
00:02:00.135 --> 00:02:03.095
<00:02:00.135>or <00:02:00.310>a <00:02:00.485>transactional <00:02:00.660>on, <00:02:00.835>on <00:02:01.010>on <00:02:01.185>your <00:02:01.360>methods, <00:02:01.535>uh,

46
00:02:03.095 --> 00:02:05.255
<00:02:03.095>spring <00:02:03.270>will <00:02:03.445>trade <00:02:03.620>proxies <00:02:03.795>to <00:02:03.970>wrap <00:02:04.145>around <00:02:04.320>that <00:02:04.495>stuff,

47
00:02:05.395 --> 00:02:07.575
<00:02:05.395>to <00:02:05.628>start <00:02:05.861>the <00:02:06.095>transaction <00:02:06.328>and <00:02:06.561>committee <00:02:06.795>transaction.

48
00:02:08.155 --> 00:02:10.335
<00:02:08.155>Um, <00:02:08.354>they <00:02:08.555>do <00:02:08.755>a <00:02:08.955>runtime, <00:02:09.155>a <00:02:09.354>OP, <00:02:09.555>uh,

49
00:02:10.335 --> 00:02:12.375
<00:02:10.335>this <00:02:10.685>is <00:02:11.035>aspect <00:02:11.385>oriented <00:02:11.735>programming.

50
00:02:12.375 --> 00:02:15.295
<00:02:12.375>You <00:02:12.530>can <00:02:12.686>wrap <00:02:12.841>another <00:02:12.997>class <00:02:13.152>and <00:02:13.308>do, <00:02:13.463>for <00:02:13.619>example, <00:02:13.775>logging

51
00:02:15.355 --> 00:02:16.735
<00:02:15.355>or <00:02:15.665>caching <00:02:15.976>or <00:02:16.286>transaction <00:02:16.597>stuff.

52
00:02:17.115 --> 00:02:19.015
<00:02:17.115>It <00:02:17.348>does <00:02:17.581>reflection <00:02:17.815>at <00:02:18.048>runtime, <00:02:18.281>for <00:02:18.515>example,

53
00:02:19.075 --> 00:02:20.135
<00:02:19.075>for <00:02:19.552>dependency <00:02:20.029>injection.

54
00:02:20.515 --> 00:02:23.775
<00:02:20.515>And <00:02:20.690>it <00:02:20.864>also <00:02:21.040>creates <00:02:21.214>annotations <00:02:21.390>on, <00:02:21.565>on <00:02:21.739>the <00:02:21.915>startup.

55
00:02:24.035 --> 00:02:26.295
<00:02:24.035>For <00:02:24.268>example, <00:02:24.501>if <00:02:24.734>you <00:02:24.968>have <00:02:25.201>inherited <00:02:25.435>annotations

56
00:02:27.125 --> 00:02:30.265
<00:02:27.125>and <00:02:27.300>all <00:02:27.475>that <00:02:27.650>stuff, <00:02:27.825>it's, <00:02:28.000>it's <00:02:28.175>doing <00:02:28.350>on <00:02:28.525>startups.

57
00:02:30.265 --> 00:02:31.465
<00:02:30.265>So <00:02:30.535>it <00:02:30.805>just <00:02:31.075>takes <00:02:31.345>time.

58
00:02:32.005 --> 00:02:34.185
<00:02:32.005>The <00:02:32.204>memory <00:02:32.405>usage <00:02:32.605>of <00:02:32.805>a <00:02:33.005>Spring <00:02:33.204>boot <00:02:33.405>application,

59
00:02:34.255 --> 00:02:36.265
<00:02:34.255>they <00:02:34.488>are <00:02:34.721>caching <00:02:34.954>all <00:02:35.188>the <00:02:35.421>reflective <00:02:35.655>stuff.

60
00:02:36.445 --> 00:02:39.065
<00:02:36.445>So <00:02:36.725>reflection <00:02:37.005>is <00:02:37.285>considered <00:02:37.565>slow <00:02:37.845>though

61
00:02:39.065 --> 00:02:40.185
<00:02:39.065>they <00:02:39.401>are <00:02:39.737>caching <00:02:40.073>stuff.

62
00:02:40.245 --> 00:02:42.665
<00:02:40.245>So <00:02:40.478>this <00:02:40.711>is <00:02:40.945>always, <00:02:41.178>um, <00:02:41.411>it's <00:02:41.645>faster,

63
00:02:42.845 --> 00:02:43.865
<00:02:42.845>but <00:02:43.074>it <00:02:43.304>takes <00:02:43.533>more <00:02:43.763>memory.

64
00:02:44.945 --> 00:02:48.285
<00:02:44.945>And <00:02:45.061>another <00:02:45.178>problem <00:02:45.295>is <00:02:45.411>if <00:02:45.528>you <00:02:45.644>have <00:02:45.761>have <00:02:45.878>a <00:02:45.995>debug <00:02:46.111>in <00:02:46.228>a <00:02:46.345>spring

65
00:02:48.285 --> 00:02:50.925
<00:02:48.285>boot <00:02:48.460>application <00:02:48.635>and <00:02:48.810>you <00:02:48.984>see <00:02:49.160>that <00:02:49.335>they <00:02:49.510>are <00:02:49.685>very,

66
00:02:50.925 --> 00:02:53.605
<00:02:50.925>very <00:02:51.100>long <00:02:51.275>stack <00:02:51.450>traces, <00:02:51.625>the <00:02:51.800>servers <00:02:51.975>and <00:02:52.150>server <00:02:52.325>filter

67
00:02:53.665 --> 00:02:55.645
<00:02:53.665>and <00:02:53.792>all <00:02:53.919>the <00:02:54.046>stuff <00:02:54.174>like <00:02:54.301>that, <00:02:54.428>and <00:02:54.555>Tom <00:02:54.683>can <00:02:54.810>at <00:02:54.937>the <00:02:55.065>bottom

68
00:02:55.705 --> 00:03:00.395
<00:02:55.704>and <00:02:55.832>then <00:02:55.959>somewhere <00:02:56.086>in <00:02:56.214>line <00:02:56.341>or <00:02:56.468>stack <00:02:56.595>100 <00:02:56.723>there <00:02:56.850>is <00:02:56.977>your <00:02:57.105>code.

69
00:03:01.455 --> 00:03:04.995
<00:03:01.455>Um, <00:03:01.595>and <00:03:01.735>micro <00:03:01.875>node <00:03:02.015>has <00:03:02.155>a <00:03:02.295>problem <00:03:02.435>with <00:03:02.575>all <00:03:02.715>of <00:03:02.855>that

70
00:03:05.295 --> 00:03:07.035
<00:03:05.295>and <00:03:05.528>they <00:03:05.761>are <00:03:05.994>trying <00:03:06.228>to <00:03:06.461>fix <00:03:06.695>that.

71
00:03:08.465 --> 00:03:09.475
<00:03:08.465>What <00:03:08.768>is <00:03:09.071>micro <00:03:09.374>node?

72
00:03:09.495 --> 00:03:11.675
<00:03:09.495>So <00:03:09.670>micro <00:03:09.845>node <00:03:10.020>is, <00:03:10.195>is <00:03:10.370>not <00:03:10.545>modern <00:03:10.720>JBM <00:03:10.895>based.

73
00:03:11.675 --> 00:03:12.915
<00:03:11.675>So <00:03:11.898>it <00:03:12.121>runs <00:03:12.344>on <00:03:12.567>the <00:03:12.791>JBM,

74
00:03:12.915 --> 00:03:14.355
<00:03:12.915>like <00:03:13.131>Spring <00:03:13.346>Boot <00:03:13.563>does <00:03:13.779>full <00:03:13.995>stack <00:03:14.210>framework.

75
00:03:14.355 --> 00:03:17.395
<00:03:14.355>So <00:03:14.530>you <00:03:14.704>can <00:03:14.880>do <00:03:15.054>everything <00:03:15.230>with, <00:03:15.405>with <00:03:15.579>micro <00:03:15.755>node,

76
00:03:17.395 --> 00:03:19.475
<00:03:17.395>which <00:03:17.570>you <00:03:17.745>can <00:03:17.920>alway <00:03:18.095>also <00:03:18.270>do <00:03:18.445>with <00:03:18.620>spring <00:03:18.795>boot.

77
00:03:19.815 --> 00:03:21.755
<00:03:19.815>You <00:03:20.015>can <00:03:20.215>render <00:03:20.415>use <00:03:20.615>and <00:03:20.815>stuff <00:03:21.015>like <00:03:21.215>that.

78
00:03:22.395 --> 00:03:24.315
<00:03:22.395>Building <00:03:22.745>modular, <00:03:23.095>easy <00:03:23.445>testable <00:03:23.795>microservices

79
00:03:24.375 --> 00:03:25.635
<00:03:24.375>and <00:03:24.942>serverless <00:03:25.509>applications.

80
00:03:25.655 --> 00:03:28.875
<00:03:25.655>So <00:03:25.810>they <00:03:25.966>all, <00:03:26.121>they, <00:03:26.277>they <00:03:26.432>cater <00:03:26.588>also <00:03:26.743>that <00:03:26.899>serverless <00:03:27.055>base,

81
00:03:28.875 --> 00:03:32.635
<00:03:28.875>which <00:03:29.015>you <00:03:29.155>heard <00:03:29.295>about, <00:03:29.435>uh, <00:03:29.575>with, <00:03:29.715>for <00:03:29.855>example, <00:03:29.995>with <00:03:30.135>cus <00:03:30.275>um,

82
00:03:34.255 --> 00:03:36.135
<00:03:34.255>the, <00:03:35.655>the,

83
00:03:36.135 --> 00:03:39.495
<00:03:36.135>the <00:03:36.242>stuff <00:03:36.350>they <00:03:36.458>are <00:03:36.565>promising <00:03:36.673>you <00:03:36.781>is <00:03:36.888>the <00:03:36.996>start <00:03:37.104>of <00:03:37.211>time <00:03:37.319>is <00:03:37.427>really <00:03:37.535>fast.

84
00:03:40.155 --> 00:03:42.775
<00:03:40.155>It <00:03:40.295>is <00:03:40.435>really <00:03:40.575>fast. <00:03:40.715>The, <00:03:40.855>the <00:03:40.995>whole <00:03:41.135>system <00:03:41.275>is <00:03:41.415>really <00:03:41.555>fast.

85
00:03:42.795 --> 00:03:43.935
<00:03:42.795>It <00:03:43.051>has <00:03:43.308>a <00:03:43.564>high <00:03:43.821>throughput

86
00:03:44.195 --> 00:03:47.775
<00:03:44.195>and <00:03:44.350>the, <00:03:44.506>the, <00:03:44.661>the <00:03:44.817>memory <00:03:44.972>footprint <00:03:45.128>is, <00:03:45.283>is <00:03:45.439>really <00:03:45.595>minimal.

87
00:03:48.115 --> 00:03:49.255
<00:03:48.115>And <00:03:48.320>I, <00:03:48.525>I <00:03:48.730>read <00:03:48.935>that <00:03:49.141>slide

88
00:03:49.315 --> 00:03:51.135
<00:03:49.315>or <00:03:49.515>I <00:03:49.715>read <00:03:49.915>that <00:03:50.115>stuff <00:03:50.315>on <00:03:50.515>their <00:03:50.715>homepage

89
00:03:51.135 --> 00:03:53.815
<00:03:51.135>and <00:03:51.290>asked <00:03:51.446>me, <00:03:51.601>okay, <00:03:51.757>how, <00:03:51.912>how <00:03:52.068>do <00:03:52.223>they <00:03:52.379>achieve <00:03:52.535>that?

90
00:03:54.315 --> 00:03:56.655
<00:03:54.315>Is <00:03:54.548>it, <00:03:54.781>is <00:03:55.015>it <00:03:55.248>really <00:03:55.481>doesn't <00:03:55.715>work?

91
00:03:58.235 --> 00:04:00.295
<00:03:58.235>And <00:03:58.468>how <00:03:58.701>do <00:03:58.935>they <00:03:59.168>achieve <00:03:59.401>that <00:03:59.635>stuff?

92
00:04:00.715 --> 00:04:04.375
<00:04:00.715>The <00:04:00.842>idea <00:04:00.969>is <00:04:01.096>all <00:04:01.224>the <00:04:01.351>stuff <00:04:01.478>which <00:04:01.605>is <00:04:01.733>which <00:04:01.860>Spring <00:04:01.987>Boot <00:04:02.115>is

93
00:04:04.375 --> 00:04:06.815
<00:04:04.375>doing <00:04:04.575>on <00:04:04.775>runtime, <00:04:04.975>they <00:04:05.175>do <00:04:05.375>it <00:04:05.575>comply <00:04:05.775>time,

94
00:04:07.115 --> 00:04:08.255
<00:04:07.115>the <00:04:07.371>all <00:04:07.628>the <00:04:07.884>proxy <00:04:08.141>stuff,

95
00:04:08.315 --> 00:04:10.775
<00:04:08.315>all <00:04:08.515>the <00:04:08.715>dependency <00:04:08.915>inject <00:04:09.115>stuff, <00:04:09.315>all <00:04:09.515>the <00:04:09.715>IOP.

96
00:04:11.355 --> 00:04:14.175
<00:04:11.355>Why <00:04:11.554>are <00:04:11.755>you <00:04:11.954>doing <00:04:12.155>this <00:04:12.355>on <00:04:12.554>your <00:04:12.755>runtime?

97
00:04:14.245 --> 00:04:16.295
<00:04:14.245>When <00:04:14.420>you <00:04:14.595>can <00:04:14.770>also <00:04:14.945>do <00:04:15.120>this <00:04:15.295>and <00:04:15.470>compile <00:04:15.645>time

98
00:04:16.295 --> 00:04:19.615
<00:04:16.295>because <00:04:16.435>you <00:04:16.575>just, <00:04:16.715>you <00:04:16.855>compile <00:04:16.995>it <00:04:17.135>once <00:04:17.275>but <00:04:17.415>run <00:04:17.555>it <00:04:17.695>often.

99
00:04:19.645 --> 00:04:22.215
<00:04:19.644>Yeah, <00:04:19.878>if <00:04:20.111>you <00:04:20.344>scale <00:04:20.578>your <00:04:20.811>combinated <00:04:21.044>pos,

100
00:04:22.405 --> 00:04:24.775
<00:04:22.405>then <00:04:22.638>the <00:04:22.871>same <00:04:23.104>code <00:04:23.338>is <00:04:23.571>just <00:04:23.804>complicated

101
00:04:24.795 --> 00:04:27.335
<00:04:24.795>and <00:04:24.995>started <00:04:25.195>second <00:04:25.395>time, <00:04:25.595>third <00:04:25.795>time, <00:04:25.995>fourth <00:04:26.195>time.

102
00:04:27.835 --> 00:04:29.295
<00:04:27.835>So <00:04:28.054>it's <00:04:28.272>compiled <00:04:28.492>once <00:04:28.711>and <00:04:28.930>run <00:04:29.149>often.

103
00:04:29.405 --> 00:04:31.415
<00:04:29.405>It's <00:04:29.604>a <00:04:29.804>trade <00:04:30.005>off <00:04:30.205>that <00:04:30.405>you, <00:04:30.604>you <00:04:30.804>compile,

104
00:04:31.415 --> 00:04:34.295
<00:04:31.415>you <00:04:31.570>do <00:04:31.726>more <00:04:31.881>on <00:04:32.037>compiled <00:04:32.192>time <00:04:32.348>and <00:04:32.503>less <00:04:32.659>on <00:04:32.815>runtime.

105
00:04:34.835 --> 00:04:37.895
<00:04:34.835>The <00:04:34.990>goal <00:04:35.146>is <00:04:35.301>no <00:04:35.457>reflection <00:04:35.612>or <00:04:35.768>as <00:04:35.923>little <00:04:36.079>as <00:04:36.234>possible.

106
00:04:38.405 --> 00:04:40.775
<00:04:38.405>They <00:04:38.638>have <00:04:38.871>no <00:04:39.104>proxies <00:04:39.338>generated <00:04:39.571>at <00:04:39.804>runtime.

107
00:04:40.825 --> 00:04:44.775
<00:04:40.825>There <00:04:41.000>is <00:04:41.175>a <00:04:41.349>minimal <00:04:41.525>startup <00:04:41.700>time, <00:04:41.875>minimal <00:04:42.050>resource <00:04:42.224>usage,

108
00:04:44.875 --> 00:04:46.295
<00:04:44.875>and <00:04:45.130>they <00:04:45.386>have <00:04:45.641>readable <00:04:45.897>stack <00:04:46.153>traces.

109
00:04:46.595 --> 00:04:49.215
<00:04:46.595>So <00:04:46.722>we <00:04:46.849>are <00:04:46.976>going <00:04:47.104>to <00:04:47.231>take <00:04:47.358>a <00:04:47.485>look <00:04:47.613>if <00:04:47.740>this <00:04:47.867>really <00:04:47.995>works.

110
00:04:51.835 --> 00:04:53.935
<00:04:51.835>Um, <00:04:52.010>the <00:04:52.185>technical <00:04:52.359>details, <00:04:52.534>how <00:04:52.710>the <00:04:52.885>stuff <00:04:53.060>is <00:04:53.234>works

111
00:04:54.475 --> 00:04:56.775
<00:04:54.475>is <00:04:54.708>they <00:04:54.941>have <00:04:55.175>an <00:04:55.408>own <00:04:55.641>annotation <00:04:55.875>processor.

112
00:04:56.775 --> 00:04:59.655
<00:04:56.775>Annotation <00:04:56.950>processor <00:04:57.125>is <00:04:57.299>essentially <00:04:57.474>a <00:04:57.650>plugin <00:04:57.825>into <00:04:58.000>the <00:04:58.174>Java

113
00:04:59.655 --> 00:05:01.615
<00:04:59.655>compiler, <00:05:00.121>which <00:05:00.588>reads <00:05:01.054>annotations

114
00:05:02.195 --> 00:05:06.495
<00:05:02.195>and <00:05:02.350>creates <00:05:02.506>then <00:05:02.661>more <00:05:02.817>byte <00:05:02.972>code <00:05:03.128>in <00:05:03.283>the <00:05:03.439>compile <00:05:03.594>phase.

115
00:05:07.745 --> 00:05:08.845
<00:05:07.745>It <00:05:08.075>creates <00:05:08.405>new <00:05:08.735>classes,

116
00:05:09.305 --> 00:05:12.165
<00:05:09.305>but <00:05:09.480>uh, <00:05:09.655>the <00:05:09.830>annotation <00:05:10.005>processor <00:05:10.180>from <00:05:10.355>micro <00:05:10.530>note <00:05:10.705>is,

117
00:05:12.165 --> 00:05:13.365
<00:05:12.165>is <00:05:12.345>wide <00:05:12.525>in <00:05:12.705>a <00:05:12.885>way <00:05:13.065>that <00:05:13.245>does,

118
00:05:13.385 --> 00:05:15.405
<00:05:13.385>it <00:05:13.560>doesn't <00:05:13.735>touch <00:05:13.909>your <00:05:14.085>coat, <00:05:14.260>it <00:05:14.435>just <00:05:14.610>extends <00:05:14.784>it.

119
00:05:15.405 --> 00:05:18.525
<00:05:15.405>Okay? <00:05:15.560>So <00:05:15.716>your <00:05:15.871>code <00:05:16.027>isn't <00:05:16.182>transformed <00:05:16.338>in <00:05:16.493>a <00:05:16.649>magically <00:05:16.804>way.

120
00:05:18.525 --> 00:05:21.765
<00:05:18.525>They <00:05:18.664>just <00:05:18.804>extend <00:05:18.945>your <00:05:19.085>class <00:05:19.224>and <00:05:19.364>do <00:05:19.505>stuff <00:05:19.645>around <00:05:19.784>and <00:05:19.924>grading.

121
00:05:21.765 --> 00:05:24.205
<00:05:21.765>You <00:05:21.940>can <00:05:22.115>edit <00:05:22.289>stuff <00:05:22.465>with <00:05:22.640>the <00:05:22.815>annotation <00:05:22.990>processor <00:05:23.164>and,

122
00:05:24.265 --> 00:05:25.805
<00:05:24.265>and <00:05:24.611>maybe <00:05:24.957>it <00:05:25.304>also <00:05:25.651>works,

123
00:05:25.805 --> 00:05:28.725
<00:05:25.805>but <00:05:25.960>you <00:05:26.116>just <00:05:26.271>paste <00:05:26.427>five <00:05:26.582>kilobyte <00:05:26.738>of <00:05:26.893>XML <00:05:27.049>in <00:05:27.205>there

124
00:05:28.785 --> 00:05:31.925
<00:05:28.785>and <00:05:28.940>then <00:05:29.096>the <00:05:29.251>annotation <00:05:29.407>processor <00:05:29.562>is <00:05:29.718>running <00:05:29.873>when <00:05:30.029>you <00:05:30.185>are

125
00:05:32.075 --> 00:05:33.925
<00:05:32.075>compiling <00:05:32.541>your <00:05:33.008>micron <00:05:33.474>application.

126
00:05:34.145 --> 00:05:36.885
<00:05:34.145>And <00:05:34.300>then <00:05:34.456>all <00:05:34.611>the <00:05:34.767>stuff <00:05:34.922>is <00:05:35.078>generated <00:05:35.233>like <00:05:35.389>the <00:05:35.544>proxies

127
00:05:36.885 --> 00:05:39.125
<00:05:36.885>and <00:05:37.040>the <00:05:37.196>a <00:05:37.351>o <00:05:37.507>OT <00:05:37.662>and <00:05:37.818>these <00:05:37.973>and <00:05:38.129>reflection <00:05:38.284>stuff.

128
00:05:41.285 --> 00:05:43.345
<00:05:41.284>Um, <00:05:41.460>this <00:05:41.635>is <00:05:41.809>a <00:05:41.984>screenshot <00:05:42.159>from <00:05:42.335>my <00:05:42.510>target <00:05:42.684>folder.

129
00:05:44.145 --> 00:05:47.545
<00:05:44.145>I <00:05:44.320>just <00:05:44.495>have <00:05:44.669>written <00:05:44.844>those <00:05:45.020>files. <00:05:45.195>Application <00:05:45.370>cash <00:05:45.544>warmer.

130
00:05:48.055 --> 00:05:51.425
<00:05:48.055>This <00:05:48.210>stuffs <00:05:48.366>from <00:05:48.521>gra <00:05:48.677>uh, <00:05:48.832>project <00:05:48.988>DTO <00:05:49.143>and <00:05:49.299>project <00:05:49.455>controller.

131
00:05:51.485 --> 00:05:53.705
<00:05:51.485>And <00:05:51.640>this <00:05:51.796>stuff <00:05:51.951>here <00:05:52.107>with <00:05:52.262>the <00:05:52.418>dollar <00:05:52.573>signs <00:05:52.729>in <00:05:52.885>it,

132
00:05:53.735 --> 00:05:57.500
<00:05:53.735>this <00:05:53.910>is <00:05:54.085>generated <00:05:54.260>by <00:05:54.435>the <00:05:54.610>micro <00:05:54.785>node <00:05:54.960>annotation <00:05:55.135>processor.

133
00:05:57.545 --> 00:06:02.325
<00:05:57.545>So <00:05:57.652>it <00:05:57.760>generates, <00:05:57.868>uh, <00:05:57.975>quite <00:05:58.083>a <00:05:58.191>bit <00:05:58.298>of, <00:05:58.406>uh, <00:05:58.514>quite <00:05:58.621>a <00:05:58.729>bit <00:05:58.837>of, <00:05:58.945>um,

134
00:06:02.595 --> 00:06:04.085
<00:06:02.595>more <00:06:03.042>by <00:06:03.489>coding <00:06:03.936>classes.

135
00:06:06.025 --> 00:06:09.405
<00:06:06.025>So, <00:06:06.180>and <00:06:06.336>I <00:06:06.491>was <00:06:06.647>thinking, <00:06:06.802>is <00:06:06.958>this <00:06:07.113>stuff <00:06:07.269>really <00:06:07.424>working?

136
00:06:10.065 --> 00:06:12.865
<00:06:10.065>Um, <00:06:10.298>so <00:06:10.531>I <00:06:10.765>tried <00:06:10.998>it <00:06:11.231>with, <00:06:11.465>um,

137
00:06:13.005 --> 00:06:15.265
<00:06:13.005>an <00:06:13.205>another <00:06:13.405>micron <00:06:13.605>node <00:06:13.805>version <00:06:14.005>actually <00:06:14.205>because <00:06:14.405>of,

138
00:06:15.305 --> 00:06:18.105
<00:06:15.305>'cause <00:06:15.432>the, <00:06:15.559>the <00:06:15.686>slides <00:06:15.814>are <00:06:15.941>quite <00:06:16.068>a <00:06:16.195>bit, <00:06:16.323>a <00:06:16.450>little <00:06:16.577>bit <00:06:16.705>older.

139
00:06:18.725 --> 00:06:21.785
<00:06:18.725>Um, <00:06:18.900>I, <00:06:19.075>what <00:06:19.250>I, <00:06:19.425>what <00:06:19.600>I <00:06:19.775>did <00:06:19.950>is <00:06:20.125>I

140
00:06:22.445 --> 00:06:26.595
<00:06:22.445>rolled <00:06:22.620>software <00:06:22.795>which <00:06:22.969>created, <00:06:23.145>um, <00:06:23.320>source <00:06:23.495>code <00:06:23.670>for <00:06:23.844>beans.

141
00:06:26.835 --> 00:06:29.435
<00:06:26.835>I <00:06:27.010>just <00:06:27.185>did <00:06:27.359>an <00:06:27.534>empty <00:06:27.710>class <00:06:27.885>put <00:06:28.060>add <00:06:28.234>component

142
00:06:29.435 --> 00:06:30.595
<00:06:29.435>on <00:06:29.696>it, <00:06:29.957>which <00:06:30.218>reduces <00:06:30.479>it.

143
00:06:30.595 --> 00:06:31.715
<00:06:30.595>It <00:06:30.847>has <00:06:31.099>spring <00:06:31.351>boot <00:06:31.602>bean

144
00:06:31.895 --> 00:06:34.915
<00:06:31.895>and <00:06:32.094>then <00:06:32.294>started <00:06:32.495>the <00:06:32.695>application <00:06:32.895>with <00:06:33.094>zero <00:06:33.294>beans.

145
00:06:35.015 --> 00:06:36.115
<00:06:35.015>It <00:06:35.344>takes <00:06:35.675>one <00:06:36.005>second

146
00:06:36.175 --> 00:06:38.635
<00:06:36.175>and <00:06:36.375>with <00:06:36.575>16,000 <00:06:36.775>beans, <00:06:36.975>it <00:06:37.175>takes <00:06:37.375>nine <00:06:37.575>seconds.

147
00:06:38.825 --> 00:06:42.795
<00:06:38.825>Okay? <00:06:38.965>I <00:06:39.104>did <00:06:39.245>the <00:06:39.385>same <00:06:39.525>with <00:06:39.664>micro <00:06:39.805>node <00:06:39.945>zero <00:06:40.085>beans, <00:06:40.224>it,

148
00:06:42.895 --> 00:06:45.635
<00:06:42.895>it <00:06:43.034>starts <00:06:43.174>in <00:06:43.315>one <00:06:43.455>second, <00:06:43.594>so <00:06:43.734>it's <00:06:43.875>comparable <00:06:44.015>to <00:06:44.155>spring <00:06:44.294>boot

149
00:06:45.635 --> 00:06:49.475
<00:06:45.635>and <00:06:45.775>with <00:06:45.914>16,000 <00:06:46.055>beans <00:06:46.195>it <00:06:46.335>takes <00:06:46.474>actually <00:06:46.615>15 <00:06:46.755>seconds <00:06:46.895>to <00:06:47.034>start.

150
00:06:50.215 --> 00:06:52.185
<00:06:50.215>So <00:06:50.681>this <00:06:51.148>is <00:06:51.615>strange

151
00:06:52.185 --> 00:06:55.465
<00:06:52.185>because <00:06:52.340>micro <00:06:52.496>node <00:06:52.651>just <00:06:52.807>promised <00:06:52.962>me <00:06:53.118>faster <00:06:53.273>startup <00:06:53.429>up <00:06:53.585>time.

152
00:06:55.885 --> 00:06:58.905
<00:06:55.885>So, <00:06:56.118>hmm, <00:06:56.351>what's <00:06:56.585>really <00:06:56.818>going <00:06:57.051>on <00:06:57.284>there?

153
00:07:01.045 --> 00:07:03.265
<00:07:01.045>Um, <00:07:01.325>we <00:07:01.605>just <00:07:01.885>debunked <00:07:02.165>the <00:07:02.445>myth.

154
00:07:03.495 --> 00:07:05.945
<00:07:03.495>It's <00:07:03.728>not <00:07:03.961>the <00:07:04.195>class <00:07:04.428>pass <00:07:04.661>scanning. <00:07:04.895>Okay?

155
00:07:05.965 --> 00:07:08.425
<00:07:05.965>So <00:07:06.104>the <00:07:06.244>class <00:07:06.385>pass <00:07:06.525>scanning <00:07:06.664>from <00:07:06.804>the <00:07:06.945>all <00:07:07.085>the <00:07:07.224>components <00:07:07.364>stuff

156
00:07:08.425 --> 00:07:10.345
<00:07:08.425>this <00:07:08.705>isn't, <00:07:08.985>is <00:07:09.265>not <00:07:09.545>so <00:07:09.825>expensive.

157
00:07:11.725 --> 00:07:13.945
<00:07:11.725>Um, <00:07:12.005>um, <00:07:12.285>it's <00:07:12.565>actually <00:07:12.845>quite <00:07:13.125>fast

158
00:07:14.125 --> 00:07:16.345
<00:07:14.125>and <00:07:14.358>the <00:07:14.591>injection <00:07:14.825>with <00:07:15.058>reflection <00:07:15.291>stuff, <00:07:15.525>so

159
00:07:16.345 --> 00:07:20.105
<00:07:16.345>that <00:07:16.472>reflection <00:07:16.599>is, <00:07:16.726>is <00:07:16.854>slow, <00:07:16.981>is <00:07:17.108>is <00:07:17.235>quite <00:07:17.363>a, <00:07:17.490>is <00:07:17.617>quite <00:07:17.745>a,

160
00:07:20.385 --> 00:07:22.785
<00:07:20.385>because <00:07:20.585>the <00:07:20.784>JDM <00:07:20.985>is <00:07:21.185>optimized <00:07:21.385>for <00:07:21.585>that <00:07:21.784>stuff

161
00:07:22.785 --> 00:07:26.505
<00:07:22.785>because <00:07:22.985>every <00:07:23.185>Java <00:07:23.385>framework <00:07:23.585>is <00:07:23.785>doing <00:07:23.985>like <00:07:24.185>reflection

162
00:07:26.805 --> 00:07:28.545
<00:07:26.805>and <00:07:27.085>um, <00:07:27.365>therefore <00:07:27.645>the <00:07:27.925>engineers <00:07:28.205>had

163
00:07:28.545 --> 00:07:29.585
<00:07:28.545>optimized <00:07:28.857>for <00:07:29.169>that <00:07:29.481>stuff.

164
00:07:30.655 --> 00:07:32.755
<00:07:30.655>What's <00:07:30.888>really <00:07:31.121>expensive <00:07:31.354>is, <00:07:31.588>is <00:07:31.821>class <00:07:32.054>loading.

165
00:07:32.775 --> 00:07:35.755
<00:07:32.775>So <00:07:32.902>the <00:07:33.029>JVM <00:07:33.156>has <00:07:33.284>to <00:07:33.411>load <00:07:33.538>the <00:07:33.665>class <00:07:33.793>verify <00:07:33.920>by <00:07:34.047>code <00:07:34.174>and,

166
00:07:35.895 --> 00:07:39.155
<00:07:35.895>and <00:07:36.034>stuff <00:07:36.174>like <00:07:36.315>that, <00:07:36.455>but <00:07:36.594>Micron <00:07:36.734>note <00:07:36.875>is <00:07:37.015>also <00:07:37.155>doing <00:07:37.294>this.

167
00:07:39.155 --> 00:07:40.595
<00:07:39.155>So <00:07:39.371>Micron <00:07:39.587>and <00:07:39.803>spring <00:07:40.019>is <00:07:40.235>doing <00:07:40.451>this,

168
00:07:40.935 --> 00:07:43.635
<00:07:40.935>but <00:07:41.168>spring <00:07:41.401>creates <00:07:41.635>the <00:07:41.868>runtime <00:07:42.101>proxies, <00:07:42.335>annotation,

169
00:07:43.635 --> 00:07:45.395
<00:07:43.635>synthesizing <00:07:44.335>big <00:07:45.034>classes,

170
00:07:45.775 --> 00:07:46.795
<00:07:45.775>and <00:07:46.693>um,

171
00:07:46.895 --> 00:07:49.435
<00:07:46.895>spring <00:07:47.070>Boot <00:07:47.245>is <00:07:47.419>also <00:07:47.594>doing <00:07:47.770>the <00:07:47.945>auto <00:07:48.120>configuration <00:07:48.294>magic,

172
00:07:49.655 --> 00:07:52.395
<00:07:49.655>for <00:07:49.830>example, <00:07:50.005>configuring <00:07:50.179>your <00:07:50.354>posts <00:07:50.530>connection <00:07:50.705>pool <00:07:50.880>if <00:07:51.054>you

173
00:07:52.395 --> 00:07:54.195
<00:07:52.395>drop, <00:07:52.628>uh, <00:07:52.861>the <00:07:53.094>Postgres <00:07:53.328>driver <00:07:53.561>in <00:07:53.794>it.

174
00:07:54.655 --> 00:07:57.685
<00:07:54.655>Um, <00:07:55.354>so <00:07:56.054>most

175
00:07:57.685 --> 00:08:00.165
<00:07:57.685>of <00:07:57.825>the <00:07:57.965>expanded <00:07:58.105>stuff <00:07:58.245>is <00:07:58.385>done <00:07:58.525>in <00:07:58.665>micro <00:07:58.805>node <00:07:58.945>compiled <00:07:59.085>time,

176
00:08:00.425 --> 00:08:04.925
<00:08:00.425>but, <00:08:00.565>um, <00:08:00.705>this <00:08:00.845>is, <00:08:00.985>this <00:08:01.125>was, <00:08:01.265>this <00:08:01.405>was <00:08:01.545>not <00:08:01.685>real <00:08:01.825>benchmark

177
00:08:04.925 --> 00:08:08.365
<00:08:04.925>because <00:08:05.080>I <00:08:05.236>I <00:08:05.391>I <00:08:05.547>just <00:08:05.702>put <00:08:05.858>empty <00:08:06.013>classes <00:08:06.169>in <00:08:06.325>there,

178
00:08:08.485 --> 00:08:10.725
<00:08:08.485>which <00:08:08.685>is <00:08:08.885>fast <00:08:09.085>in <00:08:09.285>spring <00:08:09.485>and <00:08:09.685>in <00:08:09.885>micro.

179
00:08:12.635 --> 00:08:17.165
<00:08:12.635>Okay? <00:08:12.762>So, <00:08:12.889>so <00:08:13.016>the <00:08:13.144>idea <00:08:13.271>is <00:08:13.398>generally, <00:08:13.525>um, <00:08:13.653>do <00:08:13.780>all <00:08:13.907>the <00:08:14.034>stuff,

180
00:08:17.265 --> 00:08:19.885
<00:08:17.265>the <00:08:17.498>expensive <00:08:17.731>stuff <00:08:17.965>like <00:08:18.198>this <00:08:18.431>one <00:08:18.664>here,

181
00:08:20.435 --> 00:08:23.045
<00:08:20.435>runtime <00:08:20.715>a <00:08:20.995>OP <00:08:21.275>proxies <00:08:21.555>at <00:08:21.835>compiler.

182
00:08:23.675 --> 00:08:26.245
<00:08:23.675>Okay? <00:08:23.850>So, <00:08:24.025>so <00:08:24.200>the <00:08:24.375>idea <00:08:24.550>may, <00:08:24.725>may <00:08:24.900>hold <00:08:25.075>we,

183
00:08:26.265 --> 00:08:27.445
<00:08:26.265>we <00:08:26.442>take <00:08:26.619>a <00:08:26.796>look <00:08:26.973>at <00:08:27.150>that <00:08:27.327>later.

184
00:08:27.985 --> 00:08:30.245
<00:08:27.985>So <00:08:28.265>does <00:08:28.545>this <00:08:28.825>have <00:08:29.105>no <00:08:29.385>disadvantages?

185
00:08:30.265 --> 00:08:33.605
<00:08:30.265>And <00:08:30.405>the <00:08:30.544>problem <00:08:30.685>is <00:08:30.825>every <00:08:30.965>time <00:08:31.104>someone <00:08:31.245>is <00:08:31.385>selling <00:08:31.525>you <00:08:31.664>a

186
00:08:33.605 --> 00:08:36.875
<00:08:33.605>silver <00:08:33.885>bullet, <00:08:34.164>uh, <00:08:34.445>be, <00:08:34.725>be <00:08:35.005>aware.

187
00:08:37.415 --> 00:08:40.275
<00:08:37.414>And <00:08:37.570>one, <00:08:37.726>one <00:08:37.881>really <00:08:38.037>good <00:08:38.192>tweet <00:08:38.348>I <00:08:38.503>read <00:08:38.659>is, <00:08:38.814>oh,

188
00:08:40.355 --> 00:08:43.235
<00:08:40.355>a <00:08:40.482>good <00:08:40.609>developer <00:08:40.736>is <00:08:40.864>like <00:08:40.991>a <00:08:41.118>bear <00:08:41.245>of <00:08:41.373>afraid <00:08:41.500>of <00:08:41.627>silver <00:08:41.755>bullets.

189
00:08:43.425 --> 00:08:48.245
<00:08:43.424>Okay? <00:08:43.599>Silver <00:08:43.775>bullets <00:08:43.949>are, <00:08:44.125>there <00:08:44.300>are <00:08:44.474>always <00:08:44.650>trade <00:08:44.824>off.

190
00:08:48.245 --> 00:08:49.645
<00:08:48.245>There <00:08:48.455>is <00:08:48.665>always <00:08:48.875>a <00:08:49.085>trade <00:08:49.295>off <00:08:49.505>somewhere.

191
00:08:50.065 --> 00:08:53.485
<00:08:50.065>And <00:08:50.181>the <00:08:50.298>trade <00:08:50.415>off <00:08:50.531>here <00:08:50.648>in <00:08:50.765>micro <00:08:50.881>node <00:08:50.998>is <00:08:51.115>you <00:08:51.231>build <00:08:51.348>it <00:08:51.465>stuff

192
00:08:53.485 --> 00:08:56.365
<00:08:53.485>with <00:08:53.685>maiden <00:08:53.885>and <00:08:54.085>you <00:08:54.285>have, <00:08:54.485>uh, <00:08:54.685>in <00:08:54.885>spring,

193
00:08:56.435 --> 00:08:57.725
<00:08:56.435>like <00:08:56.725>eight <00:08:57.015>seconds <00:08:57.305>build <00:08:57.596>time,

194
00:08:58.385 --> 00:09:00.885
<00:08:58.385>but <00:08:58.618>the <00:08:58.851>annotation <00:08:59.085>processor <00:08:59.318>is <00:08:59.551>running <00:08:59.785>within

195
00:09:01.445 --> 00:09:03.445
<00:09:01.445>K <00:09:01.678>teams <00:09:01.911>takes <00:09:02.145>like <00:09:02.378>five <00:09:02.611>minutes, <00:09:02.845>okay?

196
00:09:03.505 --> 00:09:07.355
<00:09:03.505>So <00:09:03.680>the <00:09:03.855>price <00:09:04.030>you <00:09:04.205>pay <00:09:04.380>is <00:09:04.555>the <00:09:04.730>compile <00:09:04.905>time.

197
00:09:07.355 --> 00:09:11.515
<00:09:07.355>Your <00:09:07.495>compile <00:09:07.635>time <00:09:07.775>will <00:09:07.915>get <00:09:08.055>longer <00:09:08.195>if <00:09:08.335>you <00:09:08.475>use <00:09:08.615>Macron. <00:09:08.755>Okay?

198
00:09:11.855 --> 00:09:13.475
<00:09:11.855>So <00:09:12.135>what's, <00:09:12.415>what's <00:09:12.695>up <00:09:12.975>with <00:09:13.255>the,

199
00:09:13.745 --> 00:09:15.715
<00:09:13.745>with <00:09:14.095>those <00:09:14.445>strange <00:09:14.795>startup <00:09:15.145>numbers

200
00:09:15.905 --> 00:09:19.275
<00:09:15.905>that <00:09:16.060>spring <00:09:16.216>is <00:09:16.371>starting <00:09:16.527>faster <00:09:16.682>with <00:09:16.838>thickening <00:09:16.993>kbs <00:09:17.149>like, <00:09:17.305>uh,

201
00:09:19.275 --> 00:09:23.595
<00:09:19.275>than <00:09:19.415>micro <00:09:19.555>node, <00:09:19.694>uh, <00:09:19.834>because <00:09:19.975>this <00:09:20.115>was <00:09:20.255>not <00:09:20.395>a <00:09:20.535>real <00:09:20.675>benchmark.

202
00:09:24.135 --> 00:09:27.825
<00:09:24.135>Um, <00:09:24.275>if <00:09:24.415>you <00:09:24.555>take <00:09:24.694>a <00:09:24.835>look <00:09:24.975>at <00:09:25.115>this, <00:09:25.255>at <00:09:25.395>the <00:09:25.535>code,

203
00:09:27.835 --> 00:09:32.145
<00:09:27.835>which <00:09:27.962>I <00:09:28.089>shown <00:09:28.216>in <00:09:28.344>the <00:09:28.471>first <00:09:28.598>slide, <00:09:28.725>like <00:09:28.853>which <00:09:28.980>did <00:09:29.107>27 <00:09:29.235>seconds

204
00:09:32.365 --> 00:09:36.985
<00:09:32.365>of <00:09:32.520>startup, <00:09:32.676>it's <00:09:32.831>not <00:09:32.987>class <00:09:33.142>loading <00:09:33.298>and <00:09:33.453>stuff <00:09:33.609>like <00:09:33.765>that.

205
00:09:37.255 --> 00:09:39.505
<00:09:37.255>It's <00:09:37.605>spring <00:09:37.955>auto <00:09:38.305>configuration <00:09:38.655>magic

206
00:09:40.385 --> 00:09:42.385
<00:09:40.385>configuring <00:09:40.665>the <00:09:40.944>whole <00:09:41.225>application <00:09:41.505>with, <00:09:41.785>uh,

207
00:09:42.745 --> 00:09:44.305
<00:09:42.745>checking <00:09:42.978>which <00:09:43.211>classes <00:09:43.445>on <00:09:43.678>the <00:09:43.911>cloud <00:09:44.145>path

208
00:09:44.645 --> 00:09:46.505
<00:09:44.645>and <00:09:44.878>configuring <00:09:45.111>all <00:09:45.345>the <00:09:45.578>spring <00:09:45.811>boot <00:09:46.045>stuff.

209
00:09:46.885 --> 00:09:49.985
<00:09:46.885>And <00:09:47.040>the <00:09:47.196>startup <00:09:47.351>of <00:09:47.507>a <00:09:47.662>spring <00:09:47.818>boot <00:09:47.973>application <00:09:48.129>really <00:09:48.285>depends

210
00:09:49.985 --> 00:09:51.505
<00:09:49.985>on <00:09:50.213>the <00:09:50.441>need <00:09:50.669>feature <00:09:50.897>of <00:09:51.125>the <00:09:51.353>application.

211
00:09:51.645 --> 00:09:53.625
<00:09:51.645>For <00:09:51.819>example, <00:09:51.995>if <00:09:52.170>you <00:09:52.345>put <00:09:52.520>the <00:09:52.694>actuator <00:09:52.870>on <00:09:53.045>it,

212
00:09:53.635 --> 00:09:55.625
<00:09:53.635>which <00:09:53.868>does <00:09:54.101>metrics <00:09:54.335>and <00:09:54.568>stuff <00:09:54.801>like <00:09:55.035>that,

213
00:09:56.205 --> 00:09:59.905
<00:09:56.205>and <00:09:56.405>uh, <00:09:56.605>more <00:09:56.805>endpoints, <00:09:57.005>it <00:09:57.205>slows <00:09:57.405>it <00:09:57.605>down.

214
00:10:00.045 --> 00:10:01.265
<00:10:00.045>If <00:10:00.411>you <00:10:00.776>enable <00:10:01.143>JPA

215
00:10:01.265 --> 00:10:04.305
<00:10:01.265>or <00:10:01.465>use <00:10:01.665>for <00:10:01.865>example <00:10:02.064>implementation, <00:10:02.265>it <00:10:02.465>slows <00:10:02.665>down.

216
00:10:04.365 --> 00:10:05.985
<00:10:04.365>If <00:10:04.598>you <00:10:04.831>activate <00:10:05.065>metrics, <00:10:05.298>it <00:10:05.531>slows <00:10:05.765>down.

217
00:10:05.985 --> 00:10:09.425
<00:10:05.985>If <00:10:06.160>you <00:10:06.335>do <00:10:06.510>lines <00:10:06.685>which <00:10:06.860>are <00:10:07.035>automatically <00:10:07.210>generated <00:10:07.385>clients

218
00:10:09.425 --> 00:10:11.345
<00:10:09.425>from <00:10:09.775>interfaces, <00:10:10.125>it's <00:10:10.474>lost <00:10:10.824>down.

219
00:10:11.895 --> 00:10:16.225
<00:10:11.895>Okay? <00:10:12.069>So <00:10:12.245>this <00:10:12.420>here <00:10:12.595>is <00:10:12.770>like <00:10:12.944>the <00:10:13.120>worst <00:10:13.295>case

220
00:10:16.225 --> 00:10:17.425
<00:10:16.225>for <00:10:16.585>the <00:10:16.944>annotation <00:10:17.305>processor.

221
00:10:17.565 --> 00:10:22.345
<00:10:17.565>It <00:10:17.681>has <00:10:17.798>to <00:10:17.915>process <00:10:18.031>like <00:10:18.148>Z <00:10:18.265>zt <00:10:18.381>K <00:10:18.498>beans, <00:10:18.615>which <00:10:18.731>are <00:10:18.848>just <00:10:18.965>empty

222
00:10:22.605 --> 00:10:24.865
<00:10:22.605>and <00:10:22.780>empty <00:10:22.955>beans <00:10:23.130>are <00:10:23.305>really <00:10:23.480>fast <00:10:23.655>in <00:10:23.830>spring <00:10:24.005>too

223
00:10:24.865 --> 00:10:27.585
<00:10:24.865>because <00:10:25.065>they <00:10:25.265>don't <00:10:25.465>do <00:10:25.665>all <00:10:25.865>the <00:10:26.065>expensive <00:10:26.265>magic

224
00:10:27.585 --> 00:10:28.745
<00:10:27.585>which <00:10:27.933>are <00:10:28.281>listed <00:10:28.629>here.

225
00:10:30.375 --> 00:10:33.235
<00:10:30.375>So <00:10:30.530>we <00:10:30.686>are <00:10:30.841>going <00:10:30.997>to <00:10:31.152>take <00:10:31.308>a <00:10:31.463>real <00:10:31.619>benchmark <00:10:31.775>later,

226
00:10:33.655 --> 00:10:36.435
<00:10:33.655>but <00:10:33.888>first, <00:10:34.121>um, <00:10:34.355>let <00:10:34.588>me <00:10:34.821>show <00:10:35.055>you

227
00:10:36.435 --> 00:10:38.915
<00:10:36.435>what <00:10:36.635>micro <00:10:36.834>node <00:10:37.035>can <00:10:37.234>bring <00:10:37.435>to <00:10:37.635>the <00:10:37.834>table.

228
00:10:39.025 --> 00:10:41.115
<00:10:39.025>What, <00:10:39.258>what <00:10:39.491>features <00:10:39.725>are <00:10:39.958>in <00:10:40.191>micro <00:10:40.425>node.

229
00:10:42.735 --> 00:10:46.835
<00:10:42.735>So <00:10:42.875>micro <00:10:43.015>node <00:10:43.155>as <00:10:43.295>a <00:10:43.435>full <00:10:43.575>stack <00:10:43.715>developer <00:10:43.855>framework <00:10:43.995>is, <00:10:44.135>um,

230
00:10:47.325 --> 00:10:49.755
<00:10:47.325>doing <00:10:47.675>dependence <00:10:48.025>injection <00:10:48.375>spring, <00:10:48.725>started

231
00:10:49.755 --> 00:10:51.315
<00:10:49.755>with <00:10:50.105>a <00:10:50.455>dependence <00:10:50.805>injection <00:10:51.155>container,

232
00:10:51.325 --> 00:10:53.075
<00:10:51.325>might <00:10:51.605>not <00:10:51.885>also <00:10:52.165>has <00:10:52.445>dependence <00:10:52.725>injection.

233
00:10:53.215 --> 00:10:54.595
<00:10:53.215>We <00:10:53.353>are <00:10:53.491>going <00:10:53.629>to <00:10:53.767>take <00:10:53.905>a <00:10:54.043>look <00:10:54.181>at <00:10:54.319>it <00:10:54.457>later.

234
00:10:55.335 --> 00:10:58.675
<00:10:55.335>It <00:10:55.510>also <00:10:55.685>can <00:10:55.860>write, <00:10:56.035>you <00:10:56.210>can <00:10:56.385>write <00:10:56.560>rest <00:10:56.735>controllers,

235
00:10:58.675 --> 00:11:01.435
<00:10:58.675>which <00:10:58.849>are <00:10:59.025>essentially <00:10:59.199>re <00:10:59.375>Jason <00:10:59.550>writing <00:10:59.724>Jasons, <00:10:59.900>you <00:11:00.074>can

236
00:11:01.575 --> 00:11:03.155
<00:11:01.575>of <00:11:01.925>course <00:11:02.275>support <00:11:02.625>other <00:11:02.975>formats.

237
00:11:04.025 --> 00:11:06.725
<00:11:04.025>Um, <00:11:04.258>you, <00:11:04.491>you <00:11:04.725>have <00:11:04.958>an <00:11:05.191>event <00:11:05.425>bus,

238
00:11:06.985 --> 00:11:09.925
<00:11:06.985>so <00:11:07.185>you <00:11:07.385>can <00:11:07.585>annotate <00:11:07.785>your <00:11:07.985>stuff, <00:11:08.185>event <00:11:08.385>listener,

239
00:11:09.925 --> 00:11:10.925
<00:11:09.925>and <00:11:10.104>then <00:11:10.285>you <00:11:10.464>can <00:11:10.645>throw <00:11:10.824>events

240
00:11:11.025 --> 00:11:12.605
<00:11:11.025>and <00:11:11.375>process <00:11:11.725>them <00:11:12.074>somewhere <00:11:12.425>else.

241
00:11:13.065 --> 00:11:15.205
<00:11:13.065>It <00:11:13.220>also <00:11:13.376>has <00:11:13.531>a <00:11:13.687>OP <00:11:13.842>for <00:11:13.998>example, <00:11:14.153>if <00:11:14.309>you <00:11:14.465>need

242
00:11:15.205 --> 00:11:18.525
<00:11:15.205>to <00:11:15.360>wrap <00:11:15.516>your <00:11:15.671>service <00:11:15.827>and <00:11:15.982>check <00:11:16.138>access <00:11:16.293>to <00:11:16.449>the <00:11:16.605>service

243
00:11:19.155 --> 00:11:22.685
<00:11:19.155>that <00:11:19.282>can <00:11:19.409>do <00:11:19.536>a <00:11:19.664>validation, <00:11:19.791>all <00:11:19.918>the <00:11:20.045>stuff <00:11:20.173>you, <00:11:20.300>you, <00:11:20.427>you, <00:11:20.555>um,

244
00:11:23.425 --> 00:11:25.845
<00:11:23.425>you <00:11:23.599>are <00:11:23.775>aware <00:11:23.949>of <00:11:24.125>spring <00:11:24.300>boot <00:11:24.474>for <00:11:24.650>example, <00:11:24.824>um,

245
00:11:25.985 --> 00:11:29.165
<00:11:25.985>at <00:11:26.112>not <00:11:26.239>now <00:11:26.366>at <00:11:26.494>not <00:11:26.621>empty, <00:11:26.748>not <00:11:26.875>blank <00:11:27.003>and <00:11:27.130>stuff <00:11:27.257>like <00:11:27.385>that.

246
00:11:30.705 --> 00:11:32.925
<00:11:30.705>It <00:11:30.905>can <00:11:31.105>do <00:11:31.305>caching, <00:11:31.505>it <00:11:31.705>can <00:11:31.905>do <00:11:32.105>retrying.

247
00:11:32.945 --> 00:11:34.285
<00:11:32.945>If <00:11:33.186>you <00:11:33.427>want <00:11:33.668>to <00:11:33.909>build <00:11:34.151>resilience

248
00:11:34.285 --> 00:11:36.205
<00:11:34.285>applications <00:11:34.635>can <00:11:34.985>do <00:11:35.334>circuit <00:11:35.685>breaking.

249
00:11:36.505 --> 00:11:39.005
<00:11:36.505>It <00:11:36.738>can, <00:11:36.971>um, <00:11:37.205>do <00:11:37.438>fallbacks <00:11:37.671>and <00:11:37.905>recoveries.

250
00:11:39.105 --> 00:11:41.085
<00:11:39.105>For <00:11:39.245>example, <00:11:39.385>if <00:11:39.525>the <00:11:39.665>surface <00:11:39.805>is <00:11:39.945>failing, <00:11:40.085>you <00:11:40.225>see <00:11:40.365>the, <00:11:40.505>the,

251
00:11:41.425 --> 00:11:43.125
<00:11:41.425>the, <00:11:41.775>the, <00:11:42.125>the <00:11:42.474>recovery <00:11:42.824>service.

252
00:11:43.865 --> 00:11:45.845
<00:11:43.865>It <00:11:44.098>can <00:11:44.331>also <00:11:44.565>schedule <00:11:44.798>beans, <00:11:45.031>for <00:11:45.265>example,

253
00:11:45.995 --> 00:11:50.205
<00:11:45.995>call <00:11:46.135>this <00:11:46.275>beam <00:11:46.415>every, <00:11:46.555>every <00:11:46.695>Monday <00:11:46.835>on <00:11:46.975>9:00 <00:11:47.115>AM <00:11:47.255>for <00:11:47.395>example.

254
00:11:51.945 --> 00:11:55.165
<00:11:51.945>Um, <00:11:52.178>you <00:11:52.411>can <00:11:52.645>choose <00:11:52.878>between <00:11:53.111>reactive <00:11:53.345>programming

255
00:11:55.185 --> 00:11:56.965
<00:11:55.185>and <00:11:55.885>blocking <00:11:56.584>programming.

256
00:11:58.145 --> 00:12:01.565
<00:11:58.145>Uh, <00:11:58.319>the <00:11:58.495>underlying <00:11:58.670>framework <00:11:58.845>which <00:11:59.020>they <00:11:59.194>use <00:11:59.370>is <00:11:59.545>neti.

257
00:12:02.915 --> 00:12:05.805
<00:12:02.915>They <00:12:03.115>have <00:12:03.314>interesting <00:12:03.515>features <00:12:03.714>like <00:12:03.915>time <00:12:04.115>root <00:12:04.314>validation.

258
00:12:06.385 --> 00:12:08.605
<00:12:06.385>Um, <00:12:06.735>so <00:12:07.085>you <00:12:07.435>can, <00:12:07.785>um,

259
00:12:08.945 --> 00:12:13.245
<00:12:08.945>put <00:12:09.145>your <00:12:09.345>root <00:12:09.545>parameters <00:12:09.745>in <00:12:09.945>the <00:12:10.145>curly <00:12:10.345>braces

260
00:12:13.265 --> 00:12:14.725
<00:12:13.265>and <00:12:13.484>if <00:12:13.703>you <00:12:13.922>don't <00:12:14.141>have <00:12:14.360>a <00:12:14.579>parameter,

261
00:12:14.725 --> 00:12:16.885
<00:12:14.725>which <00:12:14.925>is <00:12:15.125>named <00:12:15.325>like <00:12:15.525>the <00:12:15.725>curly <00:12:15.925>brace <00:12:16.125>is,

262
00:12:17.035 --> 00:12:18.485
<00:12:17.035>then <00:12:17.295>it <00:12:17.557>fails <00:12:17.818>at <00:12:18.079>comply <00:12:18.340>time.

263
00:12:18.535 --> 00:12:19.565
<00:12:18.535>Which <00:12:18.998>is <00:12:19.462>interesting

264
00:12:19.565 --> 00:12:22.125
<00:12:19.565>because <00:12:19.740>Spring <00:12:19.915>Boot <00:12:20.090>for <00:12:20.265>example, <00:12:20.440>fails <00:12:20.615>at <00:12:20.790>the <00:12:20.965>runtime.

265
00:12:23.325 --> 00:12:25.665
<00:12:23.325>It <00:12:23.500>also <00:12:23.675>has <00:12:23.850>the, <00:12:24.025>all <00:12:24.200>the <00:12:24.375>exception <00:12:24.550>handling <00:12:24.725>stuff.

266
00:12:25.925 --> 00:12:28.505
<00:12:25.925>It <00:12:26.099>can, <00:12:26.275>so <00:12:26.449>it <00:12:26.625>can <00:12:26.800>do <00:12:26.974>server <00:12:27.150>side <00:12:27.324>views.

267
00:12:28.845 --> 00:12:31.545
<00:12:28.845>If <00:12:28.972>you <00:12:29.099>want <00:12:29.226>to <00:12:29.354>render <00:12:29.481>all <00:12:29.608>your <00:12:29.735>HTML <00:12:29.863>on, <00:12:29.990>on <00:12:30.117>your <00:12:30.245>server,

268
00:12:31.645 --> 00:12:33.625
<00:12:31.645>you <00:12:31.845>can <00:12:32.045>do <00:12:32.245>with <00:12:32.444>time <00:12:32.645>handlebar <00:12:32.845>or <00:12:33.045>velocity.

269
00:12:34.325 --> 00:12:37.545
<00:12:34.325>It <00:12:34.558>also <00:12:34.791>supports <00:12:35.025>open <00:12:35.258>API <00:12:35.491>um, <00:12:35.725>documentation.

270
00:12:37.845 --> 00:12:40.585
<00:12:37.845>The <00:12:37.985>interesting <00:12:38.125>thing <00:12:38.265>here <00:12:38.405>is <00:12:38.545>the <00:12:38.685>open <00:12:38.825>ice <00:12:38.965>spec <00:12:39.105>is <00:12:39.245>not

271
00:12:40.585 --> 00:12:41.665
<00:12:40.585>generated <00:12:41.071>on <00:12:41.557>runtime,

272
00:12:41.685 --> 00:12:43.705
<00:12:41.685>but <00:12:41.918>it's <00:12:42.151>actually <00:12:42.385>generated <00:12:42.618>on <00:12:42.851>compiled <00:12:43.084>time,

273
00:12:43.835 --> 00:12:44.905
<00:12:43.835>which <00:12:44.075>is, <00:12:44.316>which <00:12:44.557>is <00:12:44.798>cool.

274
00:12:45.715 --> 00:12:48.815
<00:12:45.715>It <00:12:45.855>can <00:12:45.995>also <00:12:46.135>do <00:12:46.275>the <00:12:46.415>HT <00:12:46.555>P <00:12:46.695>client <00:12:46.835>stuff <00:12:46.975>from <00:12:47.115>spring.

275
00:12:49.405 --> 00:12:51.735
<00:12:49.405>What, <00:12:49.579>um, <00:12:49.755>what <00:12:49.930>you <00:12:50.105>might <00:12:50.280>know <00:12:50.454>from <00:12:50.630>spring <00:12:50.805>boot,

276
00:12:51.795 --> 00:12:54.375
<00:12:51.795>the <00:12:52.028>Frank <00:12:52.261>client <00:12:52.495>can <00:12:52.728>annotate <00:12:52.961>and <00:12:53.194>interface

277
00:12:54.375 --> 00:12:55.455
<00:12:54.375>and <00:12:54.699>let <00:12:55.023>implement <00:12:55.347>it.

278
00:12:55.455 --> 00:12:58.175
<00:12:55.455>And <00:12:55.582>I, <00:12:55.709>I'm <00:12:55.836>going <00:12:55.964>to <00:12:56.091>show <00:12:56.218>that <00:12:56.345>in <00:12:56.473>our, <00:12:56.600>in <00:12:56.727>our <00:12:56.855>demo,

279
00:12:59.425 --> 00:13:01.325
<00:12:59.425>it <00:12:59.599>can <00:12:59.775>do <00:12:59.949>all <00:13:00.125>the <00:13:00.300>stuff <00:13:00.474>like <00:13:00.650>client <00:13:00.824>side,

280
00:13:01.325 --> 00:13:02.805
<00:13:01.325>local <00:13:01.769>lancing <00:13:02.213>service <00:13:02.656>discovery.

281
00:13:03.145 --> 00:13:05.245
<00:13:03.145>It <00:13:03.425>has <00:13:03.704>integration <00:13:03.985>into <00:13:04.265>open <00:13:04.545>tracing.

282
00:13:05.425 --> 00:13:07.965
<00:13:05.425>So <00:13:05.599>you <00:13:05.775>get <00:13:05.949>distributed <00:13:06.125>tracing <00:13:06.300>if <00:13:06.474>you <00:13:06.650>are <00:13:06.824>building

283
00:13:08.085 --> 00:13:09.285
<00:13:08.085>a <00:13:08.625>Microsoft <00:13:09.165>architecture.

284
00:13:10.225 --> 00:13:13.965
<00:13:10.225>Um, <00:13:10.400>all <00:13:10.575>the <00:13:10.750>fancy <00:13:10.925>stuff, <00:13:11.100>reading <00:13:11.275>from <00:13:11.450>configuration <00:13:11.625>files

285
00:13:13.995 --> 00:13:16.885
<00:13:13.995>with <00:13:14.275>different <00:13:14.555>environments, <00:13:14.835>multiple <00:13:15.115>property <00:13:15.395>sources.

286
00:13:17.025 --> 00:13:20.045
<00:13:17.025>So <00:13:17.199>you <00:13:17.375>can <00:13:17.550>for <00:13:17.725>example, <00:13:17.900>override <00:13:18.074>your <00:13:18.250>configuration <00:13:18.425>with,

287
00:13:20.625 --> 00:13:22.445
<00:13:20.625>um, <00:13:20.905>environment <00:13:21.185>values <00:13:21.465>if <00:13:21.745>you're <00:13:22.025>running,

288
00:13:22.445 --> 00:13:23.605
<00:13:22.445>for <00:13:22.793>example, <00:13:23.141>in <00:13:23.489>Kubernetes.

289
00:13:25.105 --> 00:13:27.445
<00:13:25.105>It <00:13:25.385>also, <00:13:25.665>uh, <00:13:25.945>distributed <00:13:26.225>conflict <00:13:26.505>support

290
00:13:27.445 --> 00:13:28.685
<00:13:27.445>with <00:13:27.668>consul <00:13:27.891>and <00:13:28.114>stuff <00:13:28.337>like <00:13:28.560>that.

291
00:13:29.145 --> 00:13:31.445
<00:13:29.145>It <00:13:29.345>has <00:13:29.545>a <00:13:29.745>nice <00:13:29.944>database <00:13:30.145>support <00:13:30.345>for <00:13:30.545>everything.

292
00:13:31.505 --> 00:13:35.765
<00:13:31.505>You, <00:13:31.645>you, <00:13:31.785>for <00:13:31.925>example, <00:13:32.064>GPA <00:13:32.205>or <00:13:32.345>Mongo <00:13:32.485>or <00:13:32.625>Neo <00:13:32.765>four <00:13:32.905>J

293
00:13:35.785 --> 00:13:37.845
<00:13:35.785>or <00:13:36.064>even <00:13:36.344>a <00:13:36.625>post <00:13:36.905>React <00:13:37.185>driver.

294
00:13:39.305 --> 00:13:41.645
<00:13:39.305>All <00:13:39.479>the <00:13:39.655>monitoring, <00:13:39.829>the <00:13:40.005>monitoring <00:13:40.180>story <00:13:40.354>is <00:13:40.530>of <00:13:40.704>is,

295
00:13:41.665 --> 00:13:44.805
<00:13:41.665>is <00:13:41.805>is <00:13:41.944>quite <00:13:42.084>great <00:13:42.224>because <00:13:42.365>it <00:13:42.505>has <00:13:42.645>all <00:13:42.785>the <00:13:42.925>health <00:13:43.064>checks

296
00:13:44.945 --> 00:13:48.285
<00:13:44.945>and, <00:13:45.145>um, <00:13:45.345>readiness <00:13:45.545>props <00:13:45.745>and <00:13:45.945>stuff <00:13:46.145>like <00:13:46.345>that.

297
00:13:48.385 --> 00:13:49.885
<00:13:48.385>You <00:13:48.722>get <00:13:49.060>metrics <00:13:49.397>of <00:13:49.735>micrometer.

298
00:13:49.945 --> 00:13:52.885
<00:13:49.945>You <00:13:50.072>can <00:13:50.199>for <00:13:50.326>example, <00:13:50.454>change <00:13:50.581>the <00:13:50.708>local <00:13:50.835>at <00:13:50.963>runtime <00:13:51.090>if <00:13:51.217>you <00:13:51.345>are

299
00:13:52.885 --> 00:13:54.605
<00:13:52.885>debarring <00:13:53.235>hard <00:13:53.585>problems <00:13:53.935>on <00:13:54.285>production.

300
00:13:55.625 --> 00:13:58.765
<00:13:55.625>Um, <00:13:55.765>it <00:13:55.905>has <00:13:56.045>a <00:13:56.185>security <00:13:56.325>layer <00:13:56.465>just <00:13:56.605>called <00:13:56.745>micro <00:13:56.885>node <00:13:57.025>security,

301
00:13:58.765 --> 00:14:00.525
<00:13:58.765>which <00:13:59.045>is <00:13:59.324>essentially <00:13:59.605>like <00:13:59.885>spring <00:14:00.165>security

302
00:14:00.525 --> 00:14:01.565
<00:14:00.525>with <00:14:00.837>users <00:14:01.149>and <00:14:01.461>roles.

303
00:14:01.745 --> 00:14:04.925
<00:14:01.745>So <00:14:01.920>the <00:14:02.095>role <00:14:02.270>based <00:14:02.445>access <00:14:02.620>control, <00:14:02.795>all <00:14:02.970>the <00:14:03.145>basics,

304
00:14:05.125 --> 00:14:06.765
<00:14:05.125>a <00:14:05.405>basic <00:14:05.685>out <00:14:05.965>session <00:14:06.245>based <00:14:06.525>stuff.

305
00:14:08.305 --> 00:14:11.245
<00:14:08.305>And <00:14:08.505>then, <00:14:08.704>um, <00:14:08.905>it <00:14:09.104>was <00:14:09.305>advertised <00:14:09.505>at <00:14:09.704>serverless.

306
00:14:11.265 --> 00:14:14.605
<00:14:11.265>So <00:14:11.392>you <00:14:11.519>can <00:14:11.646>also <00:14:11.774>run <00:14:11.901>function <00:14:12.028>as <00:14:12.155>a <00:14:12.283>service, <00:14:12.410>which <00:14:12.537>is, <00:14:12.665>um,

307
00:14:14.605 --> 00:14:17.845
<00:14:14.605>targeting <00:14:14.780>them <00:14:14.955>a <00:14:15.130>AWS <00:14:15.305>lender <00:14:15.480>or <00:14:15.655>open, <00:14:15.830>open <00:14:16.005>fast.

308
00:14:19.025 --> 00:14:20.085
<00:14:19.025>So <00:14:19.215>you <00:14:19.406>can <00:14:19.597>also <00:14:19.788>do <00:14:19.979>that.

309
00:14:21.305 --> 00:14:25.045
<00:14:21.305>You <00:14:21.479>can <00:14:21.655>write <00:14:21.829>message <00:14:22.005>driven <00:14:22.180>applications, <00:14:22.354>which <00:14:22.530>are, <00:14:22.704>uh,

310
00:14:25.425 --> 00:14:28.645
<00:14:25.425>for <00:14:25.580>example, <00:14:25.736>you <00:14:25.891>consuming <00:14:26.047>events <00:14:26.202>from <00:14:26.358>Rapid <00:14:26.513>and <00:14:26.669>QR <00:14:26.824>Kafka.

311
00:14:29.265 --> 00:14:32.805
<00:14:29.265>You <00:14:29.439>can <00:14:29.615>write <00:14:29.790>CLI <00:14:29.965>CLI <00:14:30.140>applications, <00:14:30.314>which <00:14:30.490>is <00:14:30.665>interesting

312
00:14:32.805 --> 00:14:35.885
<00:14:32.805>because <00:14:32.979>this <00:14:33.155>is <00:14:33.329>not <00:14:33.505>like, <00:14:33.680>um, <00:14:33.854>targeted <00:14:34.030>at <00:14:34.204>the,

313
00:14:36.025 --> 00:14:37.205
<00:14:36.025>the <00:14:36.556>server <00:14:37.087>developers,

314
00:14:37.205 --> 00:14:40.645
<00:14:37.205>but <00:14:37.438>you <00:14:37.671>can <00:14:37.905>write <00:14:38.138>your <00:14:38.371>CLI <00:14:38.605>application

315
00:14:40.905 --> 00:14:42.925
<00:14:40.905>and <00:14:41.105>then <00:14:41.305>compile <00:14:41.505>it <00:14:41.704>to <00:14:41.905>a <00:14:42.105>native <00:14:42.305>image

316
00:14:43.905 --> 00:14:46.245
<00:14:43.905>and <00:14:44.105>did <00:14:44.305>the, <00:14:44.505>the <00:14:44.704>documentation <00:14:44.905>was <00:14:45.105>quite <00:14:45.305>good.

317
00:14:46.385 --> 00:14:49.125
<00:14:46.385>So <00:14:46.585>I <00:14:46.785>started <00:14:46.985>with <00:14:47.185>micro <00:14:47.385>node <00:14:47.585>1.1 <00:14:47.785>0.0

318
00:14:49.505 --> 00:14:53.045
<00:14:49.505>and <00:14:49.660>I <00:14:49.816>read <00:14:49.971>the <00:14:50.127>documentation <00:14:50.282>and <00:14:50.438>it <00:14:50.593>was <00:14:50.749>really <00:14:50.905>good.

319
00:14:53.185 --> 00:14:54.925
<00:14:53.185>It <00:14:53.464>has, <00:14:53.744>for <00:14:54.025>example, <00:14:54.305>tutorials <00:14:54.584>how

320
00:14:54.925 --> 00:14:59.125
<00:14:54.925>to <00:14:55.064>get <00:14:55.204>an <00:14:55.344>HDPS <00:14:55.484>certificate <00:14:55.625>in <00:14:55.765>there, <00:14:55.905>um, <00:14:56.045>how <00:14:56.185>to <00:14:56.324>start,

321
00:14:59.145 --> 00:15:01.725
<00:14:59.145>for <00:14:59.285>example, <00:14:59.425>start <00:14:59.564>console <00:14:59.704>with <00:14:59.845>a <00:14:59.985>doca <00:15:00.125>image <00:15:00.265>if <00:15:00.405>you <00:15:00.545>need,

322
00:15:01.785 --> 00:15:05.165
<00:15:01.785>um, <00:15:01.985>distributed, <00:15:02.185>um, <00:15:02.385>configurations <00:15:02.584>and <00:15:02.785>stuff <00:15:02.985>like <00:15:03.185>that.

323
00:15:05.465 --> 00:15:07.405
<00:15:05.465>So <00:15:05.665>I <00:15:05.865>was <00:15:06.065>really <00:15:06.265>surprised <00:15:06.465>that <00:15:06.665>it's <00:15:06.865>that,

324
00:15:07.595 --> 00:15:10.125
<00:15:07.595>that <00:15:07.735>it <00:15:07.875>has <00:15:08.015>a <00:15:08.155>good <00:15:08.295>documentation <00:15:08.435>for <00:15:08.575>such <00:15:08.715>a <00:15:08.855>new <00:15:08.995>project.

325
00:15:11.595 --> 00:15:15.165
<00:15:11.595>Okay, <00:15:11.735>but <00:15:11.875>now <00:15:12.015>I <00:15:12.155>um, <00:15:12.295>just <00:15:12.435>texted <00:15:12.575>you <00:15:12.715>enough, <00:15:12.855>blah, <00:15:12.995>blah.

326
00:15:15.585 --> 00:15:18.325
<00:15:15.585>Now <00:15:15.725>we <00:15:15.865>are <00:15:16.005>going <00:15:16.145>to <00:15:16.285>really <00:15:16.425>take <00:15:16.565>a <00:15:16.705>look <00:15:16.845>at <00:15:16.985>how

327
00:15:18.325 --> 00:15:19.925
<00:15:18.325>to <00:15:18.675>develop <00:15:19.025>micro <00:15:19.375>node <00:15:19.725>applications

328
00:15:20.145 --> 00:15:22.885
<00:15:20.145>and <00:15:20.319>this <00:15:20.495>application, <00:15:20.670>we <00:15:20.845>are <00:15:21.020>going <00:15:21.194>to <00:15:21.370>benchmark <00:15:21.545>later

329
00:15:23.265 --> 00:15:25.725
<00:15:23.265>to <00:15:23.439>see <00:15:23.615>if <00:15:23.790>it <00:15:23.965>really <00:15:24.140>starts <00:15:24.314>faster <00:15:24.490>than <00:15:24.665>spring

330
00:15:25.905 --> 00:15:27.445
<00:15:25.905>and <00:15:26.182>how <00:15:26.459>it <00:15:26.736>behaves <00:15:27.013>at <00:15:27.291>runtime.

331
00:15:27.505 --> 00:15:28.725
<00:15:27.505>How <00:15:27.871>many, <00:15:28.237>how, <00:15:28.603>how,

332
00:15:28.785 --> 00:15:30.525
<00:15:28.785>how <00:15:29.064>much <00:15:29.344>throughput <00:15:29.625>this <00:15:29.905>application <00:15:30.185>gets

333
00:15:30.585 --> 00:15:32.285
<00:15:30.585>and <00:15:30.865>how <00:15:31.145>much <00:15:31.425>memory <00:15:31.705>for <00:15:31.985>example,

334
00:15:32.345 --> 00:15:34.685
<00:15:32.345>or <00:15:32.545>TV <00:15:32.745>usage <00:15:32.945>this <00:15:33.145>stuff <00:15:33.345>is, <00:15:33.545>is <00:15:33.745>using.

335
00:15:37.065 --> 00:15:41.365
<00:15:37.065>So <00:15:37.192>the <00:15:37.319>thing <00:15:37.446>we <00:15:37.574>are <00:15:37.701>going <00:15:37.828>to <00:15:37.955>build <00:15:38.083>is <00:15:38.210>you <00:15:38.337>have <00:15:38.465>a,

336
00:15:41.985 --> 00:15:44.645
<00:15:41.985>um, <00:15:42.335>I <00:15:42.685>have <00:15:43.035>a <00:15:43.385>browser.

337
00:15:45.905 --> 00:15:48.725
<00:15:45.905>We <00:15:46.060>are <00:15:46.216>going <00:15:46.371>to <00:15:46.527>write <00:15:46.682>this <00:15:46.838>service <00:15:46.993>which <00:15:47.149>has <00:15:47.305>an

338
00:15:48.805 --> 00:15:49.925
<00:15:48.805>HDP <00:15:49.141>server <00:15:49.477>in <00:15:49.813>it.

339
00:15:50.105 --> 00:15:52.005
<00:15:50.105>We <00:15:50.305>are <00:15:50.505>going <00:15:50.705>to <00:15:50.905>write <00:15:51.105>an <00:15:51.305>HDP <00:15:51.505>endpoint

340
00:15:52.105 --> 00:15:54.605
<00:15:52.105>and <00:15:52.305>then <00:15:52.505>we <00:15:52.705>are <00:15:52.905>implementing <00:15:53.105>an <00:15:53.305>HDP <00:15:53.505>client,

341
00:15:54.815 --> 00:15:58.525
<00:15:54.815>which <00:15:54.970>is <00:15:55.126>using <00:15:55.281>a <00:15:55.437>connection <00:15:55.592>over <00:15:55.748>the <00:15:55.903>internet <00:15:56.059>to <00:15:56.215>github.com

342
00:15:58.705 --> 00:16:01.365
<00:15:58.705>to <00:15:58.985>fetch <00:15:59.265>the <00:15:59.545>most <00:15:59.825>start <00:16:00.105>projects

343
00:16:01.425 --> 00:16:03.285
<00:16:01.425>and <00:16:01.704>deliver <00:16:01.984>them <00:16:02.265>to <00:16:02.545>the <00:16:02.824>browser.

344
00:16:03.865 --> 00:16:07.805
<00:16:03.865>So <00:16:03.992>we <00:16:04.119>can <00:16:04.246>see <00:16:04.374>the <00:16:04.501>stack <00:16:04.628>from <00:16:04.755>the <00:16:04.883>requests <00:16:05.010>incoming, <00:16:05.137>we <00:16:05.265>may,

345
00:16:07.865 --> 00:16:10.205
<00:16:07.865>we <00:16:08.020>we <00:16:08.176>create <00:16:08.331>a <00:16:08.487>new <00:16:08.642>request <00:16:08.798>and <00:16:08.953>handle <00:16:09.109>that <00:16:09.265>stuff

346
00:16:10.265 --> 00:16:12.005
<00:16:10.265>and <00:16:10.498>send <00:16:10.731>it <00:16:10.965>back <00:16:11.198>to <00:16:11.431>the <00:16:11.665>browser.

347
00:16:13.345 --> 00:16:16.965
<00:16:13.345>The <00:16:13.472>first <00:16:13.599>thing <00:16:13.726>we <00:16:13.854>are <00:16:13.981>going <00:16:14.108>to <00:16:14.235>do <00:16:14.363>is <00:16:14.490>creating <00:16:14.617>the <00:16:14.745>project.

348
00:16:17.505 --> 00:16:19.285
<00:16:17.505>So <00:16:17.785>spring <00:16:18.064>has <00:16:18.345>the <00:16:18.625>spring <00:16:18.905>start

349
00:16:19.465 --> 00:16:22.125
<00:16:19.465>or <00:16:19.640>the <00:16:19.815>spring <00:16:19.990>initializer, <00:16:20.165>it's <00:16:20.340>called <00:16:20.515>startup <00:16:20.690>Spring <00:16:20.865>doo

350
00:16:22.415 --> 00:16:25.365
<00:16:22.415>micro <00:16:22.615>node <00:16:22.814>has <00:16:23.015>a <00:16:23.214>CLI <00:16:23.415>application <00:16:23.615>to <00:16:23.814>start

351
00:16:25.465 --> 00:16:26.645
<00:16:25.465>to <00:16:25.819>bootstrap <00:16:26.173>your <00:16:26.527>process.

352
00:16:27.265 --> 00:16:30.405
<00:16:27.265>The <00:16:27.439>CLI <00:16:27.615>application <00:16:27.790>you <00:16:27.965>can <00:16:28.140>install <00:16:28.314>with <00:16:28.490>S-D-A-S-D-K <00:16:28.665>man.

353
00:16:30.705 --> 00:16:32.405
<00:16:30.705>And <00:16:30.985>then <00:16:31.265>you <00:16:31.545>have <00:16:31.825>a <00:16:32.105>command,

354
00:16:32.405 --> 00:16:34.485
<00:16:32.405>which <00:16:32.638>is <00:16:32.871>called <00:16:33.105>MN <00:16:33.338>for <00:16:33.571>micro <00:16:33.805>node.

355
00:16:34.625 --> 00:16:36.485
<00:16:34.625>And <00:16:34.858>if <00:16:35.091>you <00:16:35.325>started, <00:16:35.558>you, <00:16:35.791>you <00:16:36.025>see

356
00:16:36.485 --> 00:16:38.405
<00:16:36.485>that <00:16:36.835>this <00:16:37.185>bootstraps <00:16:37.535>your <00:16:37.885>projects

357
00:16:38.465 --> 00:16:40.765
<00:16:38.465>and <00:16:38.640>if <00:16:38.815>you <00:16:38.990>started, <00:16:39.165>it <00:16:39.340>can <00:16:39.515>create <00:16:39.690>an <00:16:39.865>app,

358
00:16:40.865 --> 00:16:43.085
<00:16:40.865>you <00:16:41.098>CLI <00:16:41.331>app <00:16:41.565>function <00:16:41.798>as <00:16:42.031>a <00:16:42.265>service.

359
00:16:43.425 --> 00:16:46.725
<00:16:43.425>It <00:16:43.599>even <00:16:43.775>supports <00:16:43.949>GRPC <00:16:44.125>and <00:16:44.300>or <00:16:44.474>a <00:16:44.650>message <00:16:44.824>driven.

360
00:16:48.415 --> 00:16:52.855
<00:16:48.415>We <00:16:48.555>are <00:16:48.694>interested <00:16:48.834>in <00:16:48.974>Create <00:16:49.115>app, <00:16:49.255>which <00:16:49.395>is <00:16:49.535>a <00:16:49.675>little <00:16:49.814>bit

361
00:16:53.365 --> 00:16:57.415
<00:16:53.365>strangely <00:16:53.520>named, <00:16:53.676>but <00:16:53.831>Create <00:16:53.987>app <00:16:54.142>is <00:16:54.298>essentially <00:16:54.453>a <00:16:54.609>server <00:16:54.765>app.

362
00:16:57.555 --> 00:17:00.495
<00:16:57.555>So <00:16:57.788>it <00:16:58.021>reads <00:16:58.255>something <00:16:58.488>from <00:16:58.721>the <00:16:58.954>internet

363
00:17:00.795 --> 00:17:04.415
<00:17:00.795>and <00:17:01.074>um, <00:17:01.354>a <00:17:01.635>response <00:17:01.915>to <00:17:02.194>it.

364
00:17:06.315 --> 00:17:08.095
<00:17:06.315>If <00:17:06.665>you, <00:17:07.015>uh, <00:17:07.365>type <00:17:07.715>and,

365
00:17:08.115 --> 00:17:12.375
<00:17:08.115>and <00:17:08.290>create <00:17:08.464>at <00:17:08.640>minus <00:17:08.815>dash <00:17:08.990>dash <00:17:09.165>help <00:17:09.339>you <00:17:09.515>see

366
00:17:12.445 --> 00:17:14.495
<00:17:12.444>that <00:17:12.678>there, <00:17:12.911>you <00:17:13.145>can <00:17:13.378>say <00:17:13.611>for <00:17:13.845>example,

367
00:17:14.495 --> 00:17:15.895
<00:17:14.494>which <00:17:14.704>build <00:17:14.915>tool <00:17:15.125>you <00:17:15.335>want <00:17:15.545>to <00:17:15.754>use.

368
00:17:16.155 --> 00:17:20.015
<00:17:16.155>So <00:17:16.329>the <00:17:16.504>stuff <00:17:16.680>which <00:17:16.855>is <00:17:17.030>supported <00:17:17.204>is <00:17:17.379>Greater <00:17:17.555>Grale

369
00:17:20.015 --> 00:17:21.855
<00:17:20.015>with <00:17:20.365>the <00:17:20.715>DSL <00:17:21.065>or <00:17:21.415>Maven.

370
00:17:22.475 --> 00:17:24.735
<00:17:22.474>And <00:17:22.708>then <00:17:22.941>you <00:17:23.175>can <00:17:23.408>put <00:17:23.641>in <00:17:23.875>features.

371
00:17:25.255 --> 00:17:27.655
<00:17:25.255>Features <00:17:25.455>is <00:17:25.655>essentially <00:17:25.855>the <00:17:26.055>same, <00:17:26.255>which <00:17:26.455>you <00:17:26.655>can,

372
00:17:27.705 --> 00:17:31.055
<00:17:27.704>which <00:17:27.845>you <00:17:27.984>know <00:17:28.125>from <00:17:28.264>may <00:17:28.405>know <00:17:28.544>from <00:17:28.685>Spring <00:17:28.824>Boot <00:17:28.965>for <00:17:29.105>example.

373
00:17:32.155 --> 00:17:35.775
<00:17:32.155>You <00:17:32.310>need, <00:17:32.466>um, <00:17:32.621>database <00:17:32.777>connection <00:17:32.932>pool, <00:17:33.088>you <00:17:33.243>need <00:17:33.399>Flyway <00:17:33.555>for

374
00:17:36.655 --> 00:17:39.975
<00:17:36.655>database <00:17:36.888>migrations, <00:17:37.121>you <00:17:37.355>need <00:17:37.588>tracing <00:17:37.821>with <00:17:38.055>yagger,

375
00:17:40.155 --> 00:17:43.655
<00:17:40.155>you <00:17:40.330>need <00:17:40.504>a <00:17:40.680>graph <00:17:40.855>QL <00:17:41.030>endpoint, <00:17:41.205>you <00:17:41.379>need <00:17:41.555>velocity

376
00:17:43.955 --> 00:17:46.695
<00:17:43.955>for <00:17:44.155>view <00:17:44.355>rendering, <00:17:44.554>you <00:17:44.754>need <00:17:44.955>iage <00:17:45.155>a <00:17:45.355>PA,

377
00:17:46.835 --> 00:17:48.535
<00:17:46.835>you <00:17:47.068>can <00:17:47.301>specify <00:17:47.535>all <00:17:47.768>the <00:17:48.001>feature <00:17:48.235>stuff

378
00:17:48.555 --> 00:17:51.045
<00:17:48.555>and <00:17:48.788>the <00:17:49.021>bootstrapping <00:17:49.255>tool <00:17:49.488>is <00:17:49.721>putting <00:17:49.955>all

379
00:17:51.045 --> 00:17:53.925
<00:17:51.045>that <00:17:51.172>stuff <00:17:51.299>in <00:17:51.426>your <00:17:51.554>palm <00:17:51.681>or <00:17:51.808>in <00:17:51.935>your, <00:17:52.063>um, <00:17:52.190>buildup <00:17:52.317>cradle <00:17:52.445>file.

380
00:17:55.475 --> 00:17:58.045
<00:17:55.475>Okay? <00:17:55.675>So <00:17:55.875>I'm <00:17:56.074>going <00:17:56.274>to <00:17:56.475>execute <00:17:56.675>this <00:17:56.875>command,

381
00:17:58.045 --> 00:18:02.645
<00:17:58.045>which <00:17:58.185>creates <00:17:58.325>my <00:17:58.465>app, <00:17:58.605>which <00:17:58.745>is <00:17:58.885>named <00:17:59.025>demo, <00:17:59.165>which <00:17:59.305>I'm <00:17:59.445>going

382
00:18:02.705 --> 00:18:04.845
<00:18:02.705>to <00:18:02.938>build <00:18:03.171>with <00:18:03.405>the <00:18:03.638>Maven <00:18:03.871>built <00:18:04.105>tool.

383
00:18:07.185 --> 00:18:10.365
<00:18:07.185>If <00:18:07.301>you <00:18:07.418>take <00:18:07.534>a <00:18:07.651>look <00:18:07.768>at <00:18:07.885>what <00:18:08.001>is <00:18:08.118>now <00:18:08.235>in <00:18:08.351>my <00:18:08.468>demo <00:18:08.585>folder,

384
00:18:10.415 --> 00:18:12.365
<00:18:10.415>there <00:18:10.648>is <00:18:10.881>a <00:18:11.115>readme, <00:18:11.348>there <00:18:11.581>is <00:18:11.815>a,

385
00:18:12.885 --> 00:18:15.965
<00:18:12.885>a <00:18:13.025>small <00:18:13.165>YAML <00:18:13.305>file <00:18:13.445>in <00:18:13.585>which <00:18:13.725>the <00:18:13.865>CLI <00:18:14.004>tool <00:18:14.145>has, <00:18:14.285>um,

386
00:18:16.065 --> 00:18:18.445
<00:18:16.065>put <00:18:16.220>some <00:18:16.376>information <00:18:16.531>so <00:18:16.687>that <00:18:16.842>you <00:18:16.998>can <00:18:17.153>resume <00:18:17.309>it <00:18:17.465>later.

387
00:18:18.875 --> 00:18:20.365
<00:18:18.875>Then <00:18:19.143>there <00:18:19.411>is <00:18:19.679>the <00:18:19.947>Maven <00:18:20.216>wrapper.

388
00:18:20.705 --> 00:18:22.925
<00:18:20.705>So <00:18:20.879>you <00:18:21.054>don't <00:18:21.230>need <00:18:21.405>to <00:18:21.580>have <00:18:21.754>in <00:18:21.929>Maven <00:18:22.105>installed,

389
00:18:22.925 --> 00:18:26.205
<00:18:22.925>just <00:18:23.080>use <00:18:23.236>the <00:18:23.391>rubber <00:18:23.547>downloads, <00:18:23.702>the <00:18:23.858>Maven, <00:18:24.013>you <00:18:24.169>have <00:18:24.325>the,

390
00:18:26.265 --> 00:18:27.405
<00:18:26.265>the <00:18:26.607>Maven, <00:18:26.949>uh, <00:18:27.291>pump.

391
00:18:27.705 --> 00:18:29.365
<00:18:27.705>And <00:18:27.985>then <00:18:28.264>you <00:18:28.544>have <00:18:28.824>one <00:18:29.105>application,

392
00:18:29.505 --> 00:18:32.045
<00:18:29.505>you <00:18:29.660>have <00:18:29.816>an <00:18:29.971>application <00:18:30.127>config <00:18:30.282>file, <00:18:30.438>you <00:18:30.593>have <00:18:30.749>the <00:18:30.905>logging

393
00:18:32.565 --> 00:18:33.925
<00:18:32.565>configuration, <00:18:32.769>and <00:18:32.973>then <00:18:33.177>you <00:18:33.381>have <00:18:33.585>a <00:18:33.789>test.

394
00:18:35.275 --> 00:18:36.695
<00:18:35.275>So <00:18:35.488>the <00:18:35.701>first <00:18:35.914>thing <00:18:36.127>we <00:18:36.340>are <00:18:36.553>going

395
00:18:36.695 --> 00:18:40.255
<00:18:36.695>to <00:18:36.850>do <00:18:37.006>is <00:18:37.161>we <00:18:37.317>are <00:18:37.472>now <00:18:37.628>creating <00:18:37.783>an <00:18:37.939>HADP <00:18:38.095>endpoint.

396
00:18:40.555 --> 00:18:42.575
<00:18:40.555>So <00:18:40.788>an <00:18:41.021>endpoint <00:18:41.255>which <00:18:41.488>someone <00:18:41.721>can <00:18:41.955>call

397
00:18:42.675 --> 00:18:44.415
<00:18:42.675>and <00:18:42.875>then <00:18:43.075>we <00:18:43.274>can <00:18:43.475>do <00:18:43.675>something <00:18:43.875>with <00:18:44.075>it.

398
00:18:44.955 --> 00:18:45.975
<00:18:44.955>How <00:18:45.138>do <00:18:45.322>we <00:18:45.505>do <00:18:45.689>that <00:18:45.872>stuff?

399
00:18:47.595 --> 00:18:49.255
<00:18:47.595>The <00:18:47.770>first <00:18:47.945>thing <00:18:48.120>is <00:18:48.295>you <00:18:48.470>create <00:18:48.645>a <00:18:48.820>new <00:18:48.995>class

400
00:18:49.355 --> 00:18:51.535
<00:18:49.355>and <00:18:49.588>you <00:18:49.821>annotate <00:18:50.055>it <00:18:50.288>with <00:18:50.521>at <00:18:50.755>controller,

401
00:18:51.555 --> 00:18:54.135
<00:18:51.555>and <00:18:51.682>then <00:18:51.809>you <00:18:51.936>give <00:18:52.064>it <00:18:52.191>a <00:18:52.318>path <00:18:52.445>where <00:18:52.573>the, <00:18:52.700>this <00:18:52.827>controller <00:18:52.955>lift.

402
00:18:54.235 --> 00:18:55.855
<00:18:54.235>So <00:18:54.435>if <00:18:54.635>you <00:18:54.834>do <00:18:55.034>a <00:18:55.235>curl <00:18:55.435>slash <00:18:55.635>project,

403
00:18:56.285 --> 00:18:59.215
<00:18:56.285>this <00:18:56.425>controller <00:18:56.565>gets <00:18:56.705>called, <00:18:56.845>then <00:18:56.985>you <00:18:57.125>put <00:18:57.265>a <00:18:57.405>method <00:18:57.545>in <00:18:57.685>it.

404
00:18:59.395 --> 00:19:01.615
<00:18:59.395>The <00:18:59.628>method <00:18:59.861>is <00:19:00.095>annotated <00:19:00.328>with <00:19:00.561>at <00:19:00.795>cat.

405
00:19:01.995 --> 00:19:05.375
<00:19:01.995>So <00:19:02.135>this <00:19:02.274>response <00:19:02.415>to <00:19:02.554>GDP <00:19:02.695>get <00:19:02.834>there <00:19:02.975>is <00:19:03.114>also <00:19:03.254>a <00:19:03.395>post

406
00:19:05.375 --> 00:19:06.495
<00:19:05.375>at <00:19:05.576>delete <00:19:05.778>and <00:19:05.979>stuff <00:19:06.181>like <00:19:06.382>that.

407
00:19:07.915 --> 00:19:09.695
<00:19:07.915>And <00:19:08.195>then <00:19:08.475>you <00:19:08.754>write <00:19:09.034>your <00:19:09.315>code.

408
00:19:09.835 --> 00:19:12.775
<00:19:09.835>And <00:19:09.962>what <00:19:10.089>I <00:19:10.216>did <00:19:10.344>here <00:19:10.471>is <00:19:10.598>I <00:19:10.725>just <00:19:10.853>created <00:19:10.980>a <00:19:11.107>Java <00:19:11.235>class,

409
00:19:12.775 --> 00:19:14.975
<00:19:12.775>which <00:19:12.975>I <00:19:13.175>named <00:19:13.375>DTO <00:19:13.575>for <00:19:13.775>data <00:19:13.975>transfer <00:19:14.175>object.

410
00:19:15.795 --> 00:19:18.575
<00:19:15.795>You <00:19:15.935>see <00:19:16.075>this <00:19:16.215>here? <00:19:16.355>It <00:19:16.495>just <00:19:16.635>contains <00:19:16.775>a <00:19:16.915>list <00:19:17.055>of <00:19:17.195>projects.

411
00:19:18.575 --> 00:19:21.735
<00:19:18.575>Each <00:19:18.730>project <00:19:18.886>has <00:19:19.041>a <00:19:19.197>name <00:19:19.352>and <00:19:19.508>the <00:19:19.663>number <00:19:19.819>of <00:19:19.975>stars.

412
00:19:22.555 --> 00:19:24.615
<00:19:22.555>And <00:19:22.788>then <00:19:23.021>we <00:19:23.255>just <00:19:23.488>return <00:19:23.721>something <00:19:23.955>here,

413
00:19:24.875 --> 00:19:26.615
<00:19:24.875>we <00:19:25.108>return <00:19:25.341>Hello <00:19:25.575>world <00:19:25.808>with <00:19:26.041>12 <00:19:26.275>stars

414
00:19:26.615 --> 00:19:28.175
<00:19:26.615>and <00:19:26.848>hello <00:19:27.081>micron <00:19:27.315>node <00:19:27.548>with <00:19:27.781>one <00:19:28.015>star,

415
00:19:29.715 --> 00:19:33.735
<00:19:29.715>and <00:19:29.842>now <00:19:29.969>we <00:19:30.096>can <00:19:30.224>start <00:19:30.351>it, <00:19:30.478>micron <00:19:30.605>node <00:19:30.733>does <00:19:30.860>all <00:19:30.987>the <00:19:31.115>stuff,

416
00:19:33.745 --> 00:19:36.455
<00:19:33.745>which <00:19:33.900>is <00:19:34.056>not <00:19:34.211>needs <00:19:34.367>to <00:19:34.522>do <00:19:34.678>with <00:19:34.833>its <00:19:34.989>annotation <00:19:35.145>processor.

417
00:19:36.515 --> 00:19:37.535
<00:19:36.515>And <00:19:36.744>then <00:19:36.974>it <00:19:37.203>starts <00:19:37.433>up

418
00:19:37.755 --> 00:19:42.255
<00:19:37.755>and <00:19:37.882>then <00:19:38.009>you <00:19:38.136>can <00:19:38.264>run <00:19:38.391>a <00:19:38.518>call <00:19:38.645>to <00:19:38.773>local <00:19:38.900>host <00:19:39.027>80 <00:19:39.155>80,

419
00:19:43.595 --> 00:19:46.535
<00:19:43.595>and <00:19:43.770>then <00:19:43.945>you <00:19:44.120>get <00:19:44.295>back <00:19:44.470>in <00:19:44.645>JS <00:19:44.820>projects <00:19:44.995>name.

420
00:19:46.535 --> 00:19:50.895
<00:19:46.535>Hello. <00:19:46.735>So <00:19:46.935>Micron <00:19:47.135>is <00:19:47.335>taking <00:19:47.535>this <00:19:47.735>thing <00:19:47.935>here

421
00:19:51.275 --> 00:19:53.535
<00:19:51.275>and <00:19:51.555>automatically <00:19:51.835>serializes <00:19:52.115>it <00:19:52.395>in <00:19:52.675>js.

422
00:19:53.805 --> 00:19:57.575
<00:19:53.805>Okay? <00:19:54.085>And <00:19:54.365>that's <00:19:54.645>the <00:19:54.925>basic <00:19:55.205>stuff,

423
00:19:58.155 --> 00:20:00.175
<00:19:58.155>how <00:19:58.435>you <00:19:58.715>can <00:19:58.995>write <00:19:59.274>a <00:19:59.555>controller.

424
00:20:00.445 --> 00:20:03.215
<00:20:00.445>Okay, <00:20:00.600>so <00:20:00.756>this <00:20:00.911>one, <00:20:01.067>it's, <00:20:01.222>it's <00:20:01.378>like <00:20:01.533>if <00:20:01.689>you <00:20:01.845>know,

425
00:20:03.915 --> 00:20:05.055
<00:20:03.915>or <00:20:04.428>spring <00:20:04.941>boot

426
00:20:05.115 --> 00:20:08.415
<00:20:05.115>or <00:20:05.290>even <00:20:05.465>Jux <00:20:05.640>rss, <00:20:05.815>it's <00:20:05.990>essentially <00:20:06.165>the <00:20:06.340>same <00:20:06.515>with

427
00:20:09.375 --> 00:20:11.015
<00:20:09.375>a <00:20:09.725>little <00:20:10.075>bit <00:20:10.425>other <00:20:10.775>annotations,

428
00:20:11.075 --> 00:20:14.775
<00:20:11.075>but <00:20:11.250>it's <00:20:11.425>the <00:20:11.600>same <00:20:11.775>programming <00:20:11.950>model, <00:20:12.125>annotate <00:20:12.300>stuff, <00:20:12.475>magic

429
00:20:14.835 --> 00:20:16.615
<00:20:14.835>and <00:20:15.301>your, <00:20:15.768>your, <00:20:16.235>um,

430
00:20:16.635 --> 00:20:20.375
<00:20:16.635>method <00:20:17.101>gets <00:20:17.568>called, <00:20:18.035>okay?

431
00:20:20.995 --> 00:20:25.335
<00:20:20.995>Um, <00:20:21.169>but <00:20:21.344>we <00:20:21.520>are <00:20:21.695>developing, <00:20:21.870>uh, <00:20:22.044>a <00:20:22.219>more <00:20:22.395>scalable

432
00:20:25.855 --> 00:20:28.975
<00:20:25.855>solution <00:20:26.030>that's, <00:20:26.205>so <00:20:26.380>we <00:20:26.555>need <00:20:26.730>a <00:20:26.905>proper <00:20:27.080>software <00:20:27.255>architecture.

433
00:20:28.995 --> 00:20:30.935
<00:20:28.995>So <00:20:29.228>we <00:20:29.461>are <00:20:29.695>using <00:20:29.928>dependency <00:20:30.161>injection <00:20:30.395>pattern.

434
00:20:32.015 --> 00:20:34.515
<00:20:32.015>So <00:20:32.142>what <00:20:32.269>we <00:20:32.396>are <00:20:32.524>going <00:20:32.651>to <00:20:32.778>do <00:20:32.905>is <00:20:33.033>first <00:20:33.160>create <00:20:33.287>an <00:20:33.415>interface,

435
00:20:34.685 --> 00:20:36.355
<00:20:34.685>which <00:20:35.034>I <00:20:35.385>named <00:20:35.735>project <00:20:36.085>service.

436
00:20:36.495 --> 00:20:40.355
<00:20:36.495>And <00:20:36.695>this <00:20:36.895>service <00:20:37.094>has <00:20:37.294>the, <00:20:37.495>um, <00:20:37.695>the <00:20:37.895>responsibility

437
00:20:40.495 --> 00:20:42.675
<00:20:40.495>to <00:20:40.695>give <00:20:40.895>us <00:20:41.094>the <00:20:41.294>projects, <00:20:41.495>which <00:20:41.695>it <00:20:41.895>knows,

438
00:20:43.255 --> 00:20:46.075
<00:20:43.255>and <00:20:43.410>then <00:20:43.566>we <00:20:43.721>are <00:20:43.877>going <00:20:44.032>to <00:20:44.188>implement <00:20:44.343>this <00:20:44.499>project <00:20:44.655>service

439
00:20:46.105 --> 00:20:47.525
<00:20:46.105>with <00:20:46.531>our <00:20:46.957>implementation <00:20:47.383>class.

440
00:20:48.145 --> 00:20:51.445
<00:20:48.145>And <00:20:48.272>there <00:20:48.399>I <00:20:48.526>just <00:20:48.654>moved <00:20:48.781>all <00:20:48.908>the <00:20:49.035>code <00:20:49.163>from <00:20:49.290>the <00:20:49.417>controller <00:20:49.545>here

441
00:20:51.905 --> 00:20:54.285
<00:20:51.905>in <00:20:52.105>it <00:20:52.305>here, <00:20:52.504>okay, <00:20:52.705>this <00:20:52.905>is <00:20:53.105>the <00:20:53.305>service.

442
00:20:54.385 --> 00:20:55.925
<00:20:54.385>Now <00:20:54.583>we <00:20:54.781>have <00:20:54.979>the <00:20:55.177>service. <00:20:55.375>Now <00:20:55.572>we <00:20:55.771>have

443
00:20:55.925 --> 00:20:57.885
<00:20:55.925>to <00:20:56.158>call <00:20:56.391>this <00:20:56.625>service <00:20:56.858>from <00:20:57.091>our <00:20:57.325>controller.

444
00:20:58.185 --> 00:21:00.925
<00:20:58.185>So <00:20:58.465>I, <00:20:58.745>uh, <00:20:59.024>fixed <00:20:59.304>the <00:20:59.585>controller

445
00:21:01.545 --> 00:21:04.245
<00:21:01.545>and <00:21:01.720>this <00:21:01.895>is <00:21:02.070>the <00:21:02.245>at <00:21:02.420>ga <00:21:02.595>method <00:21:02.770>from <00:21:02.945>before.

446
00:21:04.665 --> 00:21:08.245
<00:21:04.665>And <00:21:04.805>here <00:21:04.945>I <00:21:05.085>call, <00:21:05.225>uh, <00:21:05.365>on <00:21:05.504>the <00:21:05.645>project <00:21:05.784>service <00:21:05.925>list <00:21:06.065>projects.

447
00:21:08.865 --> 00:21:11.725
<00:21:08.865>But <00:21:09.020>how <00:21:09.176>does <00:21:09.331>the <00:21:09.487>project <00:21:09.642>service <00:21:09.798>now <00:21:09.953>gets <00:21:10.109>into <00:21:10.265>the

448
00:21:11.725 --> 00:21:13.045
<00:21:11.725>controller, <00:21:11.962>and <00:21:12.200>this <00:21:12.437>is <00:21:12.675>where <00:21:12.913>the

449
00:21:13.045 --> 00:21:14.325
<00:21:13.045>dependency <00:21:13.429>injection <00:21:13.813>comes <00:21:14.197>in.

450
00:21:14.625 --> 00:21:17.605
<00:21:14.625>You <00:21:14.825>declare <00:21:15.025>a <00:21:15.225>field <00:21:15.425>from <00:21:15.625>type <00:21:15.825>project <00:21:16.025>service,

451
00:21:18.185 --> 00:21:21.565
<00:21:18.185>you <00:21:18.360>create <00:21:18.534>a <00:21:18.710>controller, <00:21:18.885>uh, <00:21:19.060>um, <00:21:19.235>a <00:21:19.409>constructor, <00:21:19.585>sorry,

452
00:21:21.965 --> 00:21:24.365
<00:21:21.965>a <00:21:22.198>constructor, <00:21:22.431>which <00:21:22.665>takes <00:21:22.898>this <00:21:23.131>project <00:21:23.365>service

453
00:21:24.435 --> 00:21:25.925
<00:21:24.435>annotated <00:21:24.882>with <00:21:25.329>add, <00:21:25.775>inject.

454
00:21:25.955 --> 00:21:28.365
<00:21:25.955>This <00:21:26.155>is <00:21:26.355>by <00:21:26.554>the <00:21:26.754>way, <00:21:26.955>uh, <00:21:27.155>karta <00:21:27.355>inject

455
00:21:29.575 --> 00:21:33.595
<00:21:29.575>and <00:21:29.775>micro <00:21:29.975>node <00:21:30.175>will <00:21:30.375>then <00:21:30.575>at, <00:21:30.775>at <00:21:30.975>startup

456
00:21:33.735 --> 00:21:37.395
<00:21:33.735>or <00:21:34.014>compiling, <00:21:34.294>we'll <00:21:34.574>see, <00:21:34.854>um, <00:21:35.135>inject

457
00:21:38.255 --> 00:21:41.195
<00:21:38.255>an <00:21:38.535>instance <00:21:38.815>of <00:21:39.095>this <00:21:39.375>interface <00:21:39.655>here.

458
00:21:41.375 --> 00:21:44.715
<00:21:41.375>So <00:21:41.530>it's <00:21:41.686>searches <00:21:41.841>for <00:21:41.997>a <00:21:42.152>class <00:21:42.308>which <00:21:42.463>implements <00:21:42.619>this <00:21:42.775>interface

459
00:21:44.735 --> 00:21:45.995
<00:21:44.735>and <00:21:45.018>then <00:21:45.302>puts <00:21:45.585>it <00:21:45.869>here.

460
00:21:46.135 --> 00:21:48.475
<00:21:46.135>We <00:21:46.290>start <00:21:46.446>in <00:21:46.601>the <00:21:46.757>field, <00:21:46.912>we <00:21:47.068>can <00:21:47.223>call <00:21:47.379>it <00:21:47.535>here.

461
00:21:49.135 --> 00:21:50.595
<00:21:49.135>We, <00:21:49.463>we <00:21:49.792>use <00:21:50.120>it <00:21:50.449>here

462
00:21:50.615 --> 00:21:52.795
<00:21:50.615>and <00:21:50.790>call <00:21:50.965>the <00:21:51.140>method, <00:21:51.315>which <00:21:51.490>gets <00:21:51.665>us <00:21:51.840>the <00:21:52.015>project.

463
00:21:53.465 --> 00:21:54.715
<00:21:53.465>Okay, <00:21:53.746>let's <00:21:54.027>try <00:21:54.308>that <00:21:54.590>stuff.

464
00:21:54.715 --> 00:21:57.645
<00:21:54.715>So <00:21:54.948>we <00:21:55.181>compile <00:21:55.415>it, <00:21:55.648>we <00:21:55.881>executed <00:21:56.115>stuff,

465
00:21:58.725 --> 00:22:02.955
<00:21:58.725>hence <00:21:58.865>we <00:21:59.004>get <00:21:59.145>an <00:21:59.284>happy <00:21:59.425>500, <00:21:59.564>1, <00:21:59.705>500 <00:21:59.844>internal <00:21:59.985>server <00:22:00.125>error,

466
00:22:02.955 --> 00:22:03.995
<00:22:02.955>which <00:22:03.423>everyone <00:22:03.890>loves.

467
00:22:04.495 --> 00:22:07.035
<00:22:04.495>So <00:22:04.728>something <00:22:04.961>went <00:22:05.195>wrong. <00:22:05.428>What's <00:22:05.661>the <00:22:05.895>problem?

468
00:22:07.735 --> 00:22:09.315
<00:22:07.735>If <00:22:07.935>you <00:22:08.135>take <00:22:08.334>a <00:22:08.534>look <00:22:08.735>at <00:22:08.935>your <00:22:09.135>console,

469
00:22:09.575 --> 00:22:12.555
<00:22:09.575>you <00:22:09.730>see <00:22:09.886>there <00:22:10.041>is <00:22:10.197>a <00:22:10.352>message, <00:22:10.508>no <00:22:10.663>bin <00:22:10.819>of <00:22:10.975>type

470
00:22:13.095 --> 00:22:14.665
<00:22:13.095>something, <00:22:13.561>something, <00:22:14.028>something <00:22:14.495>exists.

471
00:22:14.805 --> 00:22:16.345
<00:22:14.805>So <00:22:15.267>micro <00:22:15.729>node <00:22:16.191>complains

472
00:22:16.345 --> 00:22:18.865
<00:22:16.345>that <00:22:16.545>it <00:22:16.745>does <00:22:16.945>not <00:22:17.145>find <00:22:17.345>the <00:22:17.545>beam <00:22:17.745>which

473
00:22:18.875 --> 00:22:20.425
<00:22:18.875>implements <00:22:19.572>this <00:22:20.270>interface.

474
00:22:22.075 --> 00:22:25.965
<00:22:22.075>Okay? <00:22:22.308>What <00:22:22.541>we <00:22:22.775>have <00:22:23.008>to <00:22:23.241>do <00:22:23.475>is

475
00:22:27.545 --> 00:22:30.605
<00:22:27.545>we <00:22:27.825>created <00:22:28.105>this <00:22:28.385>class, <00:22:28.665>but <00:22:28.945>just

476
00:22:30.605 --> 00:22:32.405
<00:22:30.605>because <00:22:30.955>we <00:22:31.305>implemented <00:22:31.655>this <00:22:32.005>interface,

477
00:22:33.305 --> 00:22:34.885
<00:22:33.305>micron <00:22:33.655>doesn't <00:22:34.005>know <00:22:34.355>your <00:22:34.705>class.

478
00:22:35.305 --> 00:22:38.325
<00:22:35.305>You <00:22:35.460>have <00:22:35.616>to <00:22:35.771>annotate <00:22:35.927>your <00:22:36.082>class <00:22:36.238>with <00:22:36.393>the, <00:22:36.549>for <00:22:36.705>example,

479
00:22:38.425 --> 00:22:41.365
<00:22:38.425>at <00:22:38.658>Singleton, <00:22:38.891>there's <00:22:39.125>also <00:22:39.358>a <00:22:39.591>prototype <00:22:39.825>which

480
00:22:41.365 --> 00:22:42.885
<00:22:41.365>creates <00:22:41.638>a <00:22:41.912>new <00:22:42.185>bean <00:22:42.459>every <00:22:42.733>time.

481
00:22:42.885 --> 00:22:44.925
<00:22:42.885>But <00:22:43.085>at <00:22:43.285>Singleton <00:22:43.485>is <00:22:43.685>it <00:22:43.885>creates <00:22:44.085>one <00:22:44.285>bean

482
00:22:44.925 --> 00:22:47.365
<00:22:44.925>and <00:22:45.080>this <00:22:45.236>bean <00:22:45.391>gets <00:22:45.547>injected <00:22:45.702>in <00:22:45.858>all <00:22:46.013>the <00:22:46.169>injection <00:22:46.325>points.

483
00:22:47.755 --> 00:22:52.485
<00:22:47.755>Okay? <00:22:47.895>So <00:22:48.035>you <00:22:48.175>may <00:22:48.315>know <00:22:48.455>this <00:22:48.595>from, <00:22:48.735>for <00:22:48.875>example, <00:22:49.015>um, <00:22:49.155>Java

484
00:22:53.785 --> 00:22:55.725
<00:22:53.785>in, <00:22:53.960>uh, <00:22:54.135>spring <00:22:54.310>boot, <00:22:54.485>if <00:22:54.660>you <00:22:54.835>know, <00:22:55.010>spring <00:22:55.185>boot.

485
00:22:55.995 --> 00:22:58.885
<00:22:55.995>This, <00:22:56.195>the <00:22:56.395>AT <00:22:56.594>component <00:22:56.794>is <00:22:56.995>is <00:22:57.195>the <00:22:57.395>same.

486
00:22:59.245 --> 00:23:00.765
<00:22:59.245>A <00:22:59.518>component <00:22:59.792>is <00:23:00.065>also <00:23:00.339>a <00:23:00.613>single.

487
00:23:01.865 --> 00:23:03.325
<00:23:01.865>And <00:23:02.303>with <00:23:02.741>this <00:23:03.179>annotation,

488
00:23:03.985 --> 00:23:06.885
<00:23:03.985>you <00:23:04.218>micro <00:23:04.451>node <00:23:04.685>now <00:23:04.918>finds <00:23:05.151>your <00:23:05.385>class

489
00:23:07.185 --> 00:23:09.885
<00:23:07.185>and <00:23:07.385>can <00:23:07.585>inject <00:23:07.784>this <00:23:07.985>stuff <00:23:08.185>into <00:23:08.385>the <00:23:08.585>controller.

490
00:23:09.885 --> 00:23:13.005
<00:23:09.885>And <00:23:10.025>if <00:23:10.165>you <00:23:10.305>do <00:23:10.445>a <00:23:10.585>curl, <00:23:10.725>now <00:23:10.865>the <00:23:11.004>controller <00:23:11.145>gets <00:23:11.285>called,

491
00:23:13.145 --> 00:23:15.485
<00:23:13.145>the <00:23:13.345>service <00:23:13.545>gets <00:23:13.745>called, <00:23:13.945>the <00:23:14.145>project <00:23:14.345>are <00:23:14.545>returned

492
00:23:15.485 --> 00:23:17.765
<00:23:15.485>and <00:23:15.764>they <00:23:16.044>are <00:23:16.324>serialized <00:23:16.604>into <00:23:16.885>jz.

493
00:23:18.595 --> 00:23:22.605
<00:23:18.595>Okay? <00:23:18.875>So <00:23:19.155>what's <00:23:19.435>strange <00:23:19.715>here <00:23:19.995>is

494
00:23:22.755 --> 00:23:26.525
<00:23:22.755>that <00:23:22.910>they <00:23:23.066>can't <00:23:23.221>find <00:23:23.377>that <00:23:23.532>stuff <00:23:23.688>to <00:23:23.843>compile <00:23:23.999>time, <00:23:24.155>okay?

495
00:23:26.585 --> 00:23:30.725
<00:23:26.585>It, <00:23:26.725>it <00:23:26.865>would <00:23:27.005>be <00:23:27.145>quite <00:23:27.285>easy <00:23:27.425>I <00:23:27.565>think <00:23:27.705>to <00:23:27.845>find <00:23:27.985>out

496
00:23:30.725 --> 00:23:34.085
<00:23:30.725>that <00:23:30.899>compile <00:23:31.074>time <00:23:31.250>does <00:23:31.425>this <00:23:31.600>interface, <00:23:31.774>has <00:23:31.949>no <00:23:32.125>implementation

497
00:23:34.145 --> 00:23:36.005
<00:23:34.145>and <00:23:34.425>just <00:23:34.705>stop <00:23:34.985>the <00:23:35.264>compile <00:23:35.545>process.

498
00:23:36.385 --> 00:23:38.645
<00:23:36.385>But <00:23:36.618>it <00:23:36.851>doesn't, <00:23:37.085>you <00:23:37.318>can <00:23:37.551>compile <00:23:37.785>it

499
00:23:38.825 --> 00:23:41.445
<00:23:38.825>and <00:23:38.980>it <00:23:39.136>fades <00:23:39.291>at <00:23:39.447>one <00:23:39.602>time, <00:23:39.758>which <00:23:39.913>I <00:23:40.069>find <00:23:40.225>strange

500
00:23:41.545 --> 00:23:45.645
<00:23:41.545>and <00:23:41.661>I <00:23:41.778>have <00:23:41.895>no <00:23:42.011>idea <00:23:42.128>why <00:23:42.245>this <00:23:42.361>is <00:23:42.478>but <00:23:42.595>may <00:23:42.711>as <00:23:42.828>a <00:23:42.945>beep.

501
00:23:46.585 --> 00:23:49.485
<00:23:46.585>Um, <00:23:46.760>if <00:23:46.935>you <00:23:47.110>need <00:23:47.285>dependent <00:23:47.460>injection, <00:23:47.635>declare <00:23:47.810>an <00:23:47.985>interface,

502
00:23:49.715 --> 00:23:52.525
<00:23:49.715>implement <00:23:49.915>the <00:23:50.115>class, <00:23:50.314>put <00:23:50.514>a <00:23:50.715>singleton <00:23:50.915>on <00:23:51.115>it

503
00:23:52.545 --> 00:23:55.725
<00:23:52.545>or <00:23:52.778>another, <00:23:53.011>uh, <00:23:53.245>scope <00:23:53.478>which <00:23:53.711>you <00:23:53.945>need

504
00:23:55.905 --> 00:23:57.805
<00:23:55.905>and <00:23:56.105>the <00:23:56.305>micro <00:23:56.504>node <00:23:56.705>does <00:23:56.905>all <00:23:57.105>the <00:23:57.305>rest

505
00:23:58.145 --> 00:23:59.245
<00:23:58.145>and <00:23:58.392>then <00:23:58.639>it <00:23:58.887>gets <00:23:59.135>injected

506
00:23:59.245 --> 00:24:00.405
<00:23:59.245>into <00:23:59.394>a <00:23:59.543>controller <00:23:59.692>and <00:23:59.841>you <00:23:59.990>can <00:24:00.139>use <00:24:00.289>it.

507
00:24:00.995 --> 00:24:03.565
<00:24:00.995>Okay? <00:24:01.695>So <00:24:02.395>fine.

508
00:24:03.945 --> 00:24:06.765
<00:24:03.945>So <00:24:04.225>this <00:24:04.504>stuff, <00:24:04.784>someone <00:24:05.064>has <00:24:05.345>implemented

509
00:24:07.275 --> 00:24:08.765
<00:24:07.275>Firefox <00:24:07.610>or <00:24:07.945>some <00:24:08.280>something <00:24:08.616>else.

510
00:24:08.985 --> 00:24:12.445
<00:24:08.985>The <00:24:09.185>internet <00:24:09.385>thankfully <00:24:09.584>got <00:24:09.784>implemented <00:24:09.985>by <00:24:10.185>someone <00:24:10.385>else.

511
00:24:12.505 --> 00:24:14.005
<00:24:12.505>github.com <00:24:13.180>got <00:24:13.855>implemented.

512
00:24:14.185 --> 00:24:15.965
<00:24:14.185>We <00:24:14.465>have <00:24:14.745>implemented <00:24:15.024>our <00:24:15.304>HDP <00:24:15.585>server

513
00:24:16.105 --> 00:24:18.125
<00:24:16.105>and <00:24:16.280>now <00:24:16.455>we <00:24:16.630>have <00:24:16.805>to <00:24:16.980>write <00:24:17.155>our <00:24:17.330>HDP <00:24:17.505>client.

514
00:24:21.895 --> 00:24:24.035
<00:24:21.895>How <00:24:22.128>do <00:24:22.361>we <00:24:22.595>create <00:24:22.828>an <00:24:23.061>HDP <00:24:23.295>client?

515
00:24:26.815 --> 00:24:30.835
<00:24:26.815>Um, <00:24:26.955>what <00:24:27.095>we <00:24:27.235>are <00:24:27.375>going <00:24:27.515>to <00:24:27.655>call <00:24:27.795>is <00:24:27.935>the <00:24:28.075>GitHub, <00:24:28.215>API

516
00:24:30.835 --> 00:24:32.915
<00:24:30.835>and <00:24:31.035>the <00:24:31.235>GitHub <00:24:31.435>API <00:24:31.635>has <00:24:31.835>a <00:24:32.035>search <00:24:32.235>endpoint,

517
00:24:32.915 --> 00:24:34.915
<00:24:32.915>which <00:24:33.195>lets <00:24:33.475>me <00:24:33.754>search <00:24:34.034>for <00:24:34.315>repositories.

518
00:24:35.055 --> 00:24:38.435
<00:24:35.055>And <00:24:35.182>what <00:24:35.309>I <00:24:35.436>am <00:24:35.564>going <00:24:35.691>to <00:24:35.818>do <00:24:35.945>is <00:24:36.073>we <00:24:36.200>search <00:24:36.327>all <00:24:36.455>repositories,

519
00:24:38.435 --> 00:24:39.875
<00:24:38.435>which <00:24:38.694>have <00:24:38.953>greater <00:24:39.212>than <00:24:39.471>one <00:24:39.731>stars

520
00:24:39.975 --> 00:24:42.555
<00:24:39.975>and <00:24:40.149>we <00:24:40.324>sort <00:24:40.500>it <00:24:40.675>by <00:24:40.850>stars <00:24:41.024>so <00:24:41.199>that <00:24:41.375>the

521
00:24:43.185 --> 00:24:45.835
<00:24:43.185>most <00:24:43.385>star <00:24:43.585>repository <00:24:43.784>shows <00:24:43.985>up <00:24:44.185>at <00:24:44.385>the <00:24:44.585>top.

522
00:24:46.135 --> 00:24:49.435
<00:24:46.135>And <00:24:46.275>then <00:24:46.415>we <00:24:46.555>get <00:24:46.695>something <00:24:46.835>like <00:24:46.975>this, <00:24:47.115>like <00:24:47.254>total <00:24:47.395>count <00:24:47.535>items

523
00:24:49.655 --> 00:24:52.475
<00:24:49.655>and <00:24:49.810>there <00:24:49.966>are <00:24:50.121>a <00:24:50.277>lot <00:24:50.432>of <00:24:50.588>items <00:24:50.743>which <00:24:50.899>are <00:24:51.055>the,

524
00:24:52.775 --> 00:24:54.395
<00:24:52.775>the <00:24:53.125>repositories <00:24:53.475>which <00:24:53.825>got <00:24:54.175>star.

525
00:24:56.765 --> 00:24:59.345
<00:24:56.765>Now <00:24:56.892>we <00:24:57.019>want <00:24:57.146>to <00:24:57.274>call <00:24:57.401>it <00:24:57.528>stuff. <00:24:57.655>How <00:24:57.783>do <00:24:57.910>we <00:24:58.037>do <00:24:58.165>this?

526
00:24:59.565 --> 00:25:03.065
<00:24:59.565>So <00:24:59.720>we <00:24:59.876>define <00:25:00.031>an <00:25:00.187>interface, <00:25:00.342>we <00:25:00.498>annotated <00:25:00.653>with <00:25:00.809>a <00:25:00.965>client

527
00:25:03.325 --> 00:25:05.465
<00:25:03.325>and <00:25:03.525>here <00:25:03.725>we <00:25:03.925>put <00:25:04.125>in <00:25:04.325>the <00:25:04.525>base <00:25:04.725>URL,

528
00:25:05.925 --> 00:25:08.545
<00:25:05.925>we <00:25:06.205>put <00:25:06.485>in <00:25:06.764>an <00:25:07.044>at <00:25:07.325>ga.

529
00:25:09.125 --> 00:25:13.395
<00:25:09.125>And <00:25:09.475>then, <00:25:09.825>um, <00:25:10.175>we <00:25:10.525>uh,

530
00:25:13.535 --> 00:25:16.475
<00:25:13.535>put <00:25:13.735>in <00:25:13.935>there <00:25:14.135>the <00:25:14.335>URL, <00:25:14.535>which <00:25:14.735>got <00:25:14.935>called

531
00:25:17.335 --> 00:25:20.435
<00:25:17.335>and <00:25:17.462>we <00:25:17.589>have <00:25:17.716>to <00:25:17.844>put <00:25:17.971>an <00:25:18.098>header <00:25:18.225>in <00:25:18.353>there, <00:25:18.480>the <00:25:18.607>user <00:25:18.735>agent

532
00:25:20.435 --> 00:25:22.795
<00:25:20.435>because <00:25:20.635>otherwise <00:25:20.835>the <00:25:21.034>GitHub <00:25:21.235>API <00:25:21.435>doesn't <00:25:21.635>like <00:25:21.835>us

533
00:25:22.795 --> 00:25:25.195
<00:25:22.795>and <00:25:22.935>give <00:25:23.075>us <00:25:23.215>an <00:25:23.355>arrow <00:25:23.495>that <00:25:23.635>no <00:25:23.775>user <00:25:23.915>agent <00:25:24.055>is <00:25:24.195>specified.

534
00:25:26.375 --> 00:25:28.395
<00:25:26.375>And <00:25:26.725>here <00:25:27.075>we <00:25:27.425>are <00:25:27.775>returning

535
00:25:28.395 --> 00:25:31.675
<00:25:28.395>and <00:25:28.535>DDO, <00:25:28.675>which <00:25:28.815>I'm <00:25:28.955>going <00:25:29.095>to <00:25:29.235>show <00:25:29.375>in <00:25:29.514>the <00:25:29.655>next <00:25:29.795>slide.

536
00:25:32.135 --> 00:25:34.595
<00:25:32.135>The <00:25:32.335>interesting <00:25:32.535>thing <00:25:32.735>is <00:25:32.935>we <00:25:33.135>are <00:25:33.335>not <00:25:33.535>going

537
00:25:34.595 --> 00:25:36.595
<00:25:34.595>to <00:25:34.945>implement <00:25:35.295>this <00:25:35.645>interface, <00:25:35.995>okay?

538
00:25:36.775 --> 00:25:39.155
<00:25:36.775>So <00:25:37.055>micro <00:25:37.335>node <00:25:37.615>is <00:25:37.895>implementing <00:25:38.175>this

539
00:25:39.155 --> 00:25:40.715
<00:25:39.155>interface <00:25:39.621>at <00:25:40.088>compile <00:25:40.555>time.

540
00:25:40.805 --> 00:25:44.235
<00:25:40.805>Micro <00:25:40.945>node <00:25:41.085>will <00:25:41.225>create <00:25:41.365>code <00:25:41.505>which <00:25:41.645>does <00:25:41.785>all <00:25:41.925>the <00:25:42.065>HDP <00:25:42.205>calling

541
00:25:44.235 --> 00:25:46.715
<00:25:44.235>stuff <00:25:44.435>and <00:25:44.635>Jason <00:25:44.834>izing <00:25:45.034>and <00:25:45.235>stuff <00:25:45.435>like <00:25:45.635>that.

542
00:25:47.215 --> 00:25:49.435
<00:25:47.215>And <00:25:47.370>it <00:25:47.526>creates <00:25:47.681>that, <00:25:47.837>all <00:25:47.992>that <00:25:48.148>stuff <00:25:48.303>at <00:25:48.459>compile <00:25:48.615>time.

543
00:25:50.865 --> 00:25:53.795
<00:25:50.865>This <00:25:51.065>is <00:25:51.265>the <00:25:51.465>DDO <00:25:51.665>for, <00:25:51.865>um, <00:25:52.065>for <00:25:52.265>reference,

544
00:25:54.905 --> 00:25:57.155
<00:25:54.905>this <00:25:55.105>is <00:25:55.305>the <00:25:55.504>thing <00:25:55.705>here <00:25:55.905>which <00:25:56.105>gets <00:25:56.305>returned.

545
00:25:57.215 --> 00:25:59.435
<00:25:57.215>And <00:25:57.448>here <00:25:57.681>you <00:25:57.915>can <00:25:58.148>use <00:25:58.381>Jackson <00:25:58.615>annotations.

546
00:25:59.465 --> 00:26:01.275
<00:25:59.465>This <00:25:59.745>is <00:26:00.024>adjacent <00:26:00.304>property <00:26:00.584>from <00:26:00.865>Jackson.

547
00:26:01.655 --> 00:26:04.835
<00:26:01.655>You <00:26:01.810>can <00:26:01.966>map <00:26:02.121>total <00:26:02.277>underscore <00:26:02.432>count <00:26:02.588>to <00:26:02.743>total <00:26:02.899>count, <00:26:03.055>um,

548
00:26:04.835 --> 00:26:06.715
<00:26:04.835>written <00:26:05.185>in, <00:26:05.535>um, <00:26:05.885>camel <00:26:06.235>case.

549
00:26:07.145 --> 00:26:09.995
<00:26:07.145>Okay? <00:26:07.378>The <00:26:07.611>same <00:26:07.845>here <00:26:08.078>with <00:26:08.311>stargaze. <00:26:08.545>Okay?

550
00:26:10.215 --> 00:26:13.875
<00:26:10.215>Now <00:26:10.370>we <00:26:10.526>have <00:26:10.681>the <00:26:10.837>client, <00:26:10.992>which <00:26:11.148>micro <00:26:11.303>nodes <00:26:11.459>implements <00:26:11.615>at,

551
00:26:15.525 --> 00:26:19.545
<00:26:15.525>and <00:26:15.700>then <00:26:15.875>we <00:26:16.050>can <00:26:16.225>use <00:26:16.400>this <00:26:16.575>service <00:26:16.750>here <00:26:16.925>in

552
00:26:19.605 --> 00:26:20.825
<00:26:19.605>our <00:26:20.154>project <00:26:20.703>service.

553
00:26:21.205 --> 00:26:25.025
<00:26:21.205>So <00:26:21.379>the <00:26:21.554>project <00:26:21.730>service, <00:26:21.905>it <00:26:22.080>had <00:26:22.254>hard <00:26:22.429>coded <00:26:22.605>projects,

554
00:26:25.025 --> 00:26:26.505
<00:26:25.025>but <00:26:25.291>I <00:26:25.557>removed <00:26:25.824>all <00:26:26.090>that <00:26:26.357>code

555
00:26:26.725 --> 00:26:28.905
<00:26:26.725>and <00:26:26.958>we <00:26:27.191>are <00:26:27.425>instead <00:26:27.658>going <00:26:27.891>to <00:26:28.125>dependency,

556
00:26:28.905 --> 00:26:31.465
<00:26:28.905>inject <00:26:29.105>our <00:26:29.305>GitHub <00:26:29.504>clients, <00:26:29.705>this <00:26:29.905>is <00:26:30.105>the <00:26:30.305>interface,

557
00:26:32.365 --> 00:26:34.145
<00:26:32.365>and <00:26:32.565>then <00:26:32.765>we <00:26:32.965>store <00:26:33.165>it <00:26:33.365>in <00:26:33.565>our <00:26:33.765>field

558
00:26:34.165 --> 00:26:35.465
<00:26:34.165>and <00:26:34.360>then <00:26:34.554>we <00:26:34.750>can <00:26:34.945>use <00:26:35.139>it <00:26:35.335>here.

559
00:26:35.605 --> 00:26:37.945
<00:26:35.605>You <00:26:35.838>can <00:26:36.071>call <00:26:36.305>fetch <00:26:36.538>most <00:26:36.771>star <00:26:37.005>projects,

560
00:26:37.945 --> 00:26:40.665
<00:26:37.945>and <00:26:38.120>then <00:26:38.294>the <00:26:38.470>micro <00:26:38.645>node <00:26:38.820>generated <00:26:38.995>code <00:26:39.169>kicks <00:26:39.345>in

561
00:26:40.665 --> 00:26:42.025
<00:26:40.665>those <00:26:41.277>D-H-L-D-P <00:26:41.889>request.

562
00:26:42.075 --> 00:26:44.525
<00:26:42.075>These <00:26:42.250>realizes <00:26:42.425>it <00:26:42.600>all <00:26:42.775>from <00:26:42.950>Jasons <00:26:43.125>into <00:26:43.300>this <00:26:43.475>class.

563
00:26:44.785 --> 00:26:46.485
<00:26:44.785>And <00:26:44.985>then <00:26:45.185>you <00:26:45.385>can <00:26:45.585>just <00:26:45.785>use <00:26:45.985>this <00:26:46.185>class

564
00:26:46.505 --> 00:26:50.805
<00:26:46.505>to <00:26:46.645>do <00:26:46.785>some <00:26:46.925>streaming <00:26:47.065>mapping <00:26:47.205>stuff <00:26:47.345>to <00:26:47.485>get <00:26:47.625>your <00:26:47.765>project <00:26:47.905>DTO,

565
00:26:50.905 --> 00:26:53.005
<00:26:50.905>and <00:26:51.080>then <00:26:51.254>you <00:26:51.430>can <00:26:51.605>return <00:26:51.780>this <00:26:51.955>to <00:26:52.129>the <00:26:52.305>client.

566
00:26:53.825 --> 00:26:55.285
<00:26:53.825>And <00:26:54.012>then <00:26:54.200>you <00:26:54.388>have <00:26:54.575>the <00:26:54.763>whole <00:26:54.951>round <00:26:55.139>trip.

567
00:26:55.285 --> 00:26:59.525
<00:26:55.285>If <00:26:55.412>the <00:26:55.539>request <00:26:55.666>comes <00:26:55.794>in, <00:26:55.921>you <00:26:56.048>call <00:26:56.175>YRD <00:26:56.303>GitHub <00:26:56.430>client, <00:26:56.557>the <00:26:56.685>API

568
00:27:00.165 --> 00:27:01.885
<00:27:00.165>transform <00:27:00.445>the <00:27:00.725>result, <00:27:01.004>return <00:27:01.284>the <00:27:01.565>result,

569
00:27:01.905 --> 00:27:04.245
<00:27:01.905>and <00:27:02.105>Macron <00:27:02.305>is <00:27:02.504>serializing <00:27:02.705>that <00:27:02.905>stuff <00:27:03.105>to <00:27:03.305>Jason

570
00:27:04.545 --> 00:27:06.205
<00:27:04.545>and <00:27:04.825>that <00:27:05.105>gives <00:27:05.385>you <00:27:05.665>the <00:27:05.945>spec.

571
00:27:06.265 --> 00:27:10.165
<00:27:06.265>And <00:27:06.420>if <00:27:06.576>you <00:27:06.731>call <00:27:06.887>it, <00:27:07.042>it <00:27:07.198>just <00:27:07.353>looks <00:27:07.509>like <00:27:07.665>this,

572
00:27:11.225 --> 00:27:14.005
<00:27:11.225>um, <00:27:11.504>you, <00:27:11.784>this <00:27:12.064>really <00:27:12.344>calls <00:27:12.625>GitHub.

573
00:27:16.075 --> 00:27:19.975
<00:27:16.075>So <00:27:16.230>this <00:27:16.386>is <00:27:16.541>the <00:27:16.697>whole <00:27:16.852>stack <00:27:17.008>from <00:27:17.163>controller <00:27:17.319>to, <00:27:17.475>um,

574
00:27:21.475 --> 00:27:23.655
<00:27:21.475>to, <00:27:21.754>um, <00:27:22.034>HDP <00:27:22.314>client, <00:27:22.594>in <00:27:22.875>fact.

575
00:27:25.245 --> 00:27:28.815
<00:27:25.245>Okay, <00:27:25.361>let's <00:27:25.478>take <00:27:25.594>a <00:27:25.711>look <00:27:25.828>at <00:27:25.945>caching <00:27:26.061>so <00:27:26.178>that <00:27:26.294>you <00:27:26.411>can <00:27:26.528>see, <00:27:26.645>um,

576
00:27:29.355 --> 00:27:32.575
<00:27:29.355>for <00:27:29.530>example, <00:27:29.705>um, <00:27:29.880>aspect <00:27:30.055>oriented <00:27:30.230>programming <00:27:30.405>in <00:27:30.580>in <00:27:30.755>practice.

577
00:27:33.435 --> 00:27:35.255
<00:27:33.435>You <00:27:33.715>can <00:27:33.995>add <00:27:34.274>those <00:27:34.554>two <00:27:34.835>dependencies,

578
00:27:35.255 --> 00:27:37.815
<00:27:35.255>which <00:27:35.535>is <00:27:35.815>the <00:27:36.095>caching <00:27:36.375>core <00:27:36.655>dependency.

579
00:27:37.815 --> 00:27:40.255
<00:27:37.815>And <00:27:38.095>then <00:27:38.375>you <00:27:38.655>have <00:27:38.935>in, <00:27:39.215>um,

580
00:27:40.515 --> 00:27:42.095
<00:27:40.515>put <00:27:40.795>in <00:27:41.075>there <00:27:41.355>a <00:27:41.635>caching <00:27:41.915>implementation

581
00:27:42.115 --> 00:27:45.455
<00:27:42.115>for <00:27:42.231>which <00:27:42.348>I <00:27:42.465>use <00:27:42.581>caffeine, <00:27:42.698>which <00:27:42.815>is <00:27:42.931>a <00:27:43.048>one <00:27:43.165>on <00:27:43.281>cache <00:27:43.398>for <00:27:43.515>Java.

582
00:27:46.235 --> 00:27:48.895
<00:27:46.235>And <00:27:46.468>you <00:27:46.701>put <00:27:46.935>at <00:27:47.168>cashable <00:27:47.401>at <00:27:47.635>cashable

583
00:27:48.895 --> 00:27:50.695
<00:27:48.895>and <00:27:49.128>the <00:27:49.361>cache <00:27:49.595>name <00:27:49.828>on <00:27:50.061>your <00:27:50.295>list,

584
00:27:50.695 --> 00:27:52.735
<00:27:50.695>project <00:27:51.044>method <00:27:51.395>from <00:27:51.745>the <00:27:52.095>service,

585
00:27:53.635 --> 00:27:57.775
<00:27:53.635>and <00:27:53.835>then <00:27:54.035>you <00:27:54.235>have <00:27:54.435>to <00:27:54.635>configure <00:27:54.835>your <00:27:55.035>cache.

586
00:27:58.075 --> 00:27:59.735
<00:27:58.075>So <00:27:58.275>this <00:27:58.475>is <00:27:58.675>the <00:27:58.875>name <00:27:59.075>of <00:27:59.275>the <00:27:59.475>cache.

587
00:28:00.485 --> 00:28:03.735
<00:28:00.485>This <00:28:00.612>one <00:28:00.739>here, <00:28:00.866>and <00:28:00.994>this <00:28:01.121>one <00:28:01.248>here <00:28:01.375>are <00:28:01.503>related <00:28:01.630>to <00:28:01.757>say, <00:28:01.885>okay,

588
00:28:03.735 --> 00:28:05.855
<00:28:03.735>maximum <00:28:03.968>size <00:28:04.201>because <00:28:04.435>I <00:28:04.668>just <00:28:04.901>returned <00:28:05.135>one.

589
00:28:05.965 --> 00:28:09.095
<00:28:05.965>It's, <00:28:06.120>it's <00:28:06.276>fine. <00:28:06.431>You <00:28:06.587>say <00:28:06.742>expire <00:28:06.898>after, <00:28:07.053>right, <00:28:07.209>10 <00:28:07.365>seconds

590
00:28:09.715 --> 00:28:11.255
<00:28:09.715>and <00:28:09.992>then <00:28:10.269>you <00:28:10.546>can <00:28:10.823>execute <00:28:11.101>it.

591
00:28:11.255 --> 00:28:12.575
<00:28:11.255>If <00:28:11.453>you <00:28:11.651>execute <00:28:11.849>it <00:28:12.047>the <00:28:12.245>first <00:28:12.443>time.

592
00:28:12.575 --> 00:28:15.735
<00:28:12.575>This, <00:28:12.730>the <00:28:12.886>cash <00:28:13.041>is <00:28:13.197>called, <00:28:13.352>so <00:28:13.508>it's <00:28:13.663>a <00:28:13.819>cash <00:28:13.975>miss.

593
00:28:15.875 --> 00:28:18.935
<00:28:15.875>So <00:28:16.108>it <00:28:16.341>takes <00:28:16.575>like, <00:28:16.808>uh, <00:28:17.041>800 <00:28:17.275>milliseconds

594
00:28:18.995 --> 00:28:21.855
<00:28:18.995>and <00:28:19.150>the <00:28:19.306>next <00:28:19.461>time <00:28:19.617>it <00:28:19.772>just <00:28:19.928>takes, <00:28:20.083>uh, <00:28:20.239>40 <00:28:20.395>milliseconds.

595
00:28:22.155 --> 00:28:24.895
<00:28:22.155>So <00:28:22.388>you <00:28:22.621>see <00:28:22.855>this <00:28:23.088>caching <00:28:23.321>works <00:28:23.555>exactly

596
00:28:25.005 --> 00:28:26.295
<00:28:25.005>like <00:28:25.295>you <00:28:25.585>expected <00:28:25.875>it <00:28:26.166>to.

597
00:28:26.595 --> 00:28:30.735
<00:28:26.595>And <00:28:26.735>what <00:28:26.875>happens <00:28:27.015>at <00:28:27.155>compile <00:28:27.295>time <00:28:27.435>is <00:28:27.575>micro <00:28:27.715>nodes <00:28:27.855>extends <00:28:27.995>your

598
00:28:30.735 --> 00:28:34.055
<00:28:30.735>class, <00:28:31.084>um, <00:28:31.435>overrides <00:28:31.784>this <00:28:32.135>list.

599
00:28:34.055 --> 00:28:37.655
<00:28:34.055>Project <00:28:34.195>method, <00:28:34.335>it <00:28:34.475>checks <00:28:34.615>if <00:28:34.755>the <00:28:34.895>result <00:28:35.035>is <00:28:35.175>already <00:28:35.315>in <00:28:35.455>the

600
00:28:37.655 --> 00:28:39.375
<00:28:37.655>cache, <00:28:37.935>if <00:28:38.215>yes <00:28:38.495>returns, <00:28:38.774>if <00:28:39.055>not,

601
00:28:39.435 --> 00:28:41.295
<00:28:39.435>it <00:28:39.715>calls <00:28:39.995>super <00:28:40.274>dot <00:28:40.554>list <00:28:40.835>projects.

602
00:28:41.515 --> 00:28:43.735
<00:28:41.515>And <00:28:41.690>all <00:28:41.865>that <00:28:42.040>stuff <00:28:42.215>is <00:28:42.390>not <00:28:42.565>done <00:28:42.740>at <00:28:42.915>runtime.

603
00:28:43.835 --> 00:28:45.655
<00:28:43.835>So <00:28:44.035>the <00:28:44.235>proxy <00:28:44.435>is <00:28:44.635>not <00:28:44.835>generated <00:28:45.035>at <00:28:45.235>runtime,

604
00:28:45.955 --> 00:28:49.535
<00:28:45.955>but <00:28:46.188>it's <00:28:46.421>generated <00:28:46.655>at, <00:28:46.888>that's, <00:28:47.121>that's <00:28:47.355>the,

605
00:28:50.275 --> 00:28:51.455
<00:28:50.275>that's <00:28:50.629>the <00:28:50.983>caching <00:28:51.337>feature.

606
00:28:52.725 --> 00:28:55.455
<00:28:52.725>Okay? <00:28:52.925>So <00:28:53.125>the <00:28:53.324>last <00:28:53.524>feature, <00:28:53.725>which <00:28:53.925>I'm <00:28:54.125>going

607
00:28:55.455 --> 00:28:58.375
<00:28:55.455>to <00:28:55.595>show <00:28:55.735>is <00:28:55.875>the <00:28:56.014>failure <00:28:56.155>recovery, <00:28:56.294>which, <00:28:56.435>um, <00:28:56.574>which <00:28:56.715>you <00:28:56.855>need,

608
00:28:58.375 --> 00:29:00.015
<00:28:58.375>if <00:28:58.608>you <00:28:58.841>want <00:28:59.075>to <00:28:59.308>build <00:28:59.541>resilient <00:28:59.775>systems,

609
00:29:01.295 --> 00:29:04.555
<00:29:01.295>you <00:29:01.528>can <00:29:01.761>implement <00:29:01.995>another <00:29:02.228>fallback <00:29:02.461>project <00:29:02.695>service.

610
00:29:04.745 --> 00:29:06.475
<00:29:04.745>This <00:29:05.094>implements <00:29:05.445>the <00:29:05.794>same <00:29:06.145>interface

611
00:29:06.475 --> 00:29:08.395
<00:29:06.475>and <00:29:06.708>it <00:29:06.941>just <00:29:07.175>returns <00:29:07.408>our <00:29:07.641>hardcoded <00:29:07.875>list

612
00:29:09.055 --> 00:29:11.715
<00:29:09.055>and <00:29:09.288>you <00:29:09.521>annotate <00:29:09.755>this <00:29:09.988>with <00:29:10.221>at <00:29:10.455>fallback.

613
00:29:11.975 --> 00:29:14.915
<00:29:11.975>So <00:29:12.149>micron <00:29:12.324>node <00:29:12.500>knows <00:29:12.675>that <00:29:12.850>if <00:29:13.024>something <00:29:13.199>goes <00:29:13.375>wrong,

614
00:29:15.415 --> 00:29:18.635
<00:29:15.415>it <00:29:15.555>can <00:29:15.695>call <00:29:15.835>the <00:29:15.975>fallback, <00:29:16.115>it <00:29:16.254>can <00:29:16.395>call <00:29:16.534>the <00:29:16.675>fallback <00:29:16.815>method,

615
00:29:19.775 --> 00:29:22.555
<00:29:19.775>and <00:29:19.950>then <00:29:20.125>you <00:29:20.300>need <00:29:20.475>to <00:29:20.650>annotate <00:29:20.825>your <00:29:21.000>project <00:29:21.175>service

616
00:29:22.905 --> 00:29:24.195
<00:29:22.905>with <00:29:23.485>at <00:29:24.066>recoverable.

617
00:29:24.375 --> 00:29:27.435
<00:29:24.375>So <00:29:24.575>micron <00:29:24.775>node <00:29:24.975>knows <00:29:25.175>if <00:29:25.375>this <00:29:25.575>project <00:29:25.775>service,

618
00:29:27.705 --> 00:29:31.635
<00:29:27.705>this <00:29:27.845>is <00:29:27.985>the <00:29:28.125>one <00:29:28.264>which <00:29:28.405>does <00:29:28.544>the <00:29:28.685>GitHub <00:29:28.824>call, <00:29:28.965>um, <00:29:29.105>fails,

619
00:29:32.265 --> 00:29:34.995
<00:29:32.265>then <00:29:32.498>please <00:29:32.731>use <00:29:32.965>the <00:29:33.198>fallback <00:29:33.431>project <00:29:33.665>service

620
00:29:35.255 --> 00:29:37.195
<00:29:35.255>and <00:29:35.430>just <00:29:35.605>call <00:29:35.780>this <00:29:35.955>method <00:29:36.130>and <00:29:36.305>use <00:29:36.480>this <00:29:36.655>stuff.

621
00:29:39.695 --> 00:29:43.245
<00:29:39.695>And, <00:29:39.850>um, <00:29:40.006>I <00:29:40.161>removed <00:29:40.317>the <00:29:40.472>internet <00:29:40.628>to <00:29:40.783>test <00:29:40.939>this <00:29:41.095>stuff

622
00:29:43.505 --> 00:29:45.125
<00:29:43.505>and <00:29:43.785>then <00:29:44.065>I <00:29:44.345>called <00:29:44.625>it <00:29:44.905>and,

623
00:29:45.305 --> 00:29:47.725
<00:29:45.305>and <00:29:45.585>then <00:29:45.865>the <00:29:46.145>original <00:29:46.425>service <00:29:46.705>fails.

624
00:29:47.865 --> 00:29:49.565
<00:29:47.865>It <00:29:48.098>locks <00:29:48.331>the <00:29:48.565>reason <00:29:48.798>why <00:29:49.031>it <00:29:49.265>failed,

625
00:29:49.785 --> 00:29:51.565
<00:29:49.785>and <00:29:50.018>then <00:29:50.251>it <00:29:50.485>calls <00:29:50.718>the <00:29:50.951>fallback <00:29:51.185>service.

626
00:29:51.945 --> 00:29:56.525
<00:29:51.945>And <00:29:52.100>here <00:29:52.256>you <00:29:52.411>get <00:29:52.567>the <00:29:52.722>hardcoded <00:29:52.878>list <00:29:53.033>of <00:29:53.189>fallback <00:29:53.345>projects,

627
00:29:56.735 --> 00:29:59.325
<00:29:56.735>which <00:29:56.968>is <00:29:57.201>from <00:29:57.435>this, <00:29:57.668>this <00:29:57.901>one <00:29:58.135>here.

628
00:30:00.225 --> 00:30:02.165
<00:30:00.225>And <00:30:00.380>if <00:30:00.536>you <00:30:00.691>take <00:30:00.847>a <00:30:01.002>look <00:30:01.158>how <00:30:01.313>this <00:30:01.469>is <00:30:01.625>implemented,

629
00:30:02.165 --> 00:30:03.525
<00:30:02.165>it's <00:30:02.471>implemented <00:30:02.777>the <00:30:03.083>right, <00:30:03.389>the,

630
00:30:03.865 --> 00:30:07.365
<00:30:03.865>the <00:30:03.992>same <00:30:04.119>way <00:30:04.246>you <00:30:04.374>have <00:30:04.501>a <00:30:04.628>project <00:30:04.755>service, <00:30:04.883>which <00:30:05.010>is, <00:30:05.137>which <00:30:05.265>is,

631
00:30:07.865 --> 00:30:08.965
<00:30:07.865>um, <00:30:08.360>extended <00:30:08.855>here,

632
00:30:09.225 --> 00:30:11.805
<00:30:09.225>and <00:30:09.399>then <00:30:09.574>it <00:30:09.750>extend <00:30:09.925>essentially <00:30:10.100>does <00:30:10.274>a <00:30:10.449>try <00:30:10.625>catch

633
00:30:12.065 --> 00:30:14.445
<00:30:12.065>and <00:30:12.220>if <00:30:12.376>it <00:30:12.531>catches <00:30:12.687>an <00:30:12.842>exception, <00:30:12.998>it <00:30:13.153>lock <00:30:13.309>the <00:30:13.465>exception

634
00:30:14.445 --> 00:30:16.565
<00:30:14.445>and <00:30:14.600>the <00:30:14.756>call, <00:30:14.911>the <00:30:15.067>call <00:30:15.222>back, <00:30:15.378>uh, <00:30:15.533>the <00:30:15.689>default <00:30:15.845>service

635
00:30:16.905 --> 00:30:20.445
<00:30:16.905>and <00:30:17.105>all <00:30:17.305>the <00:30:17.504>coders <00:30:17.705>generated <00:30:17.905>at <00:30:18.105>complete <00:30:18.305>time.

636
00:30:21.955 --> 00:30:24.125
<00:30:21.955>Okay? <00:30:22.129>So <00:30:22.304>I'm <00:30:22.480>going <00:30:22.655>to <00:30:22.830>skip <00:30:23.004>this <00:30:23.179>and <00:30:23.355>this,

637
00:30:25.425 --> 00:30:27.805
<00:30:25.425>and <00:30:25.600>we <00:30:25.774>are <00:30:25.950>now <00:30:26.125>going <00:30:26.300>to <00:30:26.475>take <00:30:26.649>a <00:30:26.825>look.

638
00:30:27.825 --> 00:30:31.565
<00:30:27.825>So <00:30:27.965>we <00:30:28.105>have <00:30:28.245>implemented <00:30:28.385>our <00:30:28.525>service, <00:30:28.665>which <00:30:28.805>when <00:30:28.945>we <00:30:29.085>call <00:30:29.225>it,

639
00:30:31.585 --> 00:30:33.885
<00:30:31.585>it <00:30:31.725>goes <00:30:31.865>to <00:30:32.005>the <00:30:32.145>GitHub, <00:30:32.285>API <00:30:32.425>and <00:30:32.565>it <00:30:32.705>does <00:30:32.845>some <00:30:32.985>caching

640
00:30:34.025 --> 00:30:35.565
<00:30:34.025>and <00:30:34.302>it <00:30:34.579>would <00:30:34.856>be <00:30:35.133>now <00:30:35.411>interesting

641
00:30:35.565 --> 00:30:38.165
<00:30:35.565>to <00:30:35.765>implement <00:30:35.965>the <00:30:36.165>whole <00:30:36.365>stuff <00:30:36.565>in <00:30:36.765>micro <00:30:36.965>node

642
00:30:38.165 --> 00:30:40.245
<00:30:38.165>and <00:30:38.320>in <00:30:38.476>spring <00:30:38.631>boot, <00:30:38.787>and <00:30:38.942>then <00:30:39.098>we <00:30:39.253>can <00:30:39.409>compare <00:30:39.565>those.

643
00:30:42.505 --> 00:30:46.045
<00:30:42.505>So <00:30:42.680>I <00:30:42.855>did <00:30:43.030>this <00:30:43.205>and <00:30:43.380>I, <00:30:43.555>this <00:30:43.730>is, <00:30:43.905>um,

644
00:30:46.055 --> 00:30:50.605
<00:30:46.055>micro <00:30:46.210>node <00:30:46.366>2.2, <00:30:46.521>um, <00:30:46.677>micro <00:30:46.832>node <00:30:46.988>three <00:30:47.143>got <00:30:47.299>released, <00:30:47.455>um,

645
00:30:51.285 --> 00:30:53.805
<00:30:51.285>I <00:30:51.425>don't <00:30:51.565>know, <00:30:51.705>four, <00:30:51.845>four <00:30:51.985>days <00:30:52.125>ago <00:30:52.265>or <00:30:52.405>something <00:30:52.545>like <00:30:52.685>that.

646
00:30:53.805 --> 00:30:56.205
<00:30:53.805>But <00:30:53.980>this <00:30:54.155>is, <00:30:54.330>um, <00:30:54.505>the <00:30:54.680>micro <00:30:54.855>two, <00:30:55.030>two <00:30:55.205>version

647
00:30:57.585 --> 00:30:59.925
<00:30:57.585>and <00:30:57.935>you <00:30:58.285>can <00:30:58.635>build <00:30:58.985>it

648
00:31:00.065 --> 00:31:02.685
<00:31:00.065>and <00:31:00.220>if <00:31:00.376>you <00:31:00.531>build <00:31:00.687>it, <00:31:00.842>it <00:31:00.998>builds <00:31:01.153>in <00:31:01.309>three <00:31:01.465>seconds.

649
00:31:03.025 --> 00:31:05.485
<00:31:03.025>So <00:31:03.225>it's <00:31:03.425>not <00:31:03.625>that <00:31:03.825>the <00:31:04.025>annotation <00:31:04.225>processor <00:31:04.425>is,

650
00:31:05.545 --> 00:31:06.725
<00:31:05.545>is <00:31:05.899>very, <00:31:06.253>very <00:31:06.607>slow.

651
00:31:07.035 --> 00:31:09.325
<00:31:07.035>It's, <00:31:07.385>it's, <00:31:07.735>it's, <00:31:08.085>it's, <00:31:08.435>okay.

652
00:31:09.545 --> 00:31:11.965
<00:31:09.545>So <00:31:09.825>there <00:31:10.105>is <00:31:10.385>no <00:31:10.665>performance <00:31:10.945>problems

653
00:31:11.965 --> 00:31:13.205
<00:31:11.965>with <00:31:12.337>the <00:31:12.708>annotation <00:31:13.081>processor.

654
00:31:13.865 --> 00:31:16.685
<00:31:13.865>The <00:31:14.005>annotation <00:31:14.145>processor <00:31:14.285>just <00:31:14.425>takes <00:31:14.565>a <00:31:14.705>long <00:31:14.845>time <00:31:14.985>if <00:31:15.125>you <00:31:15.265>put

655
00:31:16.685 --> 00:31:18.245
<00:31:16.685>like <00:31:17.034>16,000 <00:31:17.385>classes <00:31:17.735>in <00:31:18.085>there,

656
00:31:18.345 --> 00:31:20.405
<00:31:18.345>but <00:31:18.578>that's <00:31:18.811>a <00:31:19.045>really, <00:31:19.278>really <00:31:19.511>big <00:31:19.745>application.

657
00:31:22.345 --> 00:31:23.605
<00:31:22.345>Um, <00:31:22.628>then <00:31:22.912>you <00:31:23.195>start <00:31:23.479>it

658
00:31:23.705 --> 00:31:27.205
<00:31:23.705>and <00:31:23.905>it <00:31:24.105>really <00:31:24.304>starts <00:31:24.504>in, <00:31:24.705>uh, <00:31:24.905>600 <00:31:25.105>milliseconds.

659
00:31:27.315 --> 00:31:29.405
<00:31:27.315>Okay? <00:31:27.595>So <00:31:27.875>the <00:31:28.155>whole <00:31:28.435>application <00:31:28.715>with

660
00:31:29.625 --> 00:31:32.925
<00:31:29.625>and <00:31:29.825>controller <00:31:30.025>with <00:31:30.225>the <00:31:30.425>service <00:31:30.625>dependency <00:31:30.825>injected <00:31:31.025>stuff

661
00:31:33.315 --> 00:31:36.125
<00:31:33.315>with <00:31:33.515>the <00:31:33.715>cacheable <00:31:33.915>and <00:31:34.115>with <00:31:34.315>the <00:31:34.515>GitHub <00:31:34.715>client,

662
00:31:36.375 --> 00:31:39.445
<00:31:36.375>which <00:31:36.608>is <00:31:36.841>generated, <00:31:37.075>which <00:31:37.308>from <00:31:37.541>the <00:31:37.775>interface,

663
00:31:39.945 --> 00:31:43.325
<00:31:39.945>it <00:31:40.100>starts <00:31:40.256>in <00:31:40.411>600 <00:31:40.567>milliseconds, <00:31:40.722>which <00:31:40.878>is <00:31:41.033>not <00:31:41.189>that <00:31:41.345>bad

664
00:31:44.825 --> 00:31:48.885
<00:31:44.825>if <00:31:44.941>you <00:31:45.058>build <00:31:45.175>it <00:31:45.291>up <00:31:45.408>in <00:31:45.525>spring, <00:31:45.641>it's <00:31:45.758>spring <00:31:45.875>2.4, <00:31:45.991>not <00:31:46.108>the <00:31:46.225>2.51,

665
00:31:48.985 --> 00:31:53.485
<00:31:48.985>but, <00:31:49.112>uh, <00:31:49.239>should <00:31:49.366>be <00:31:49.494>okay <00:31:49.621>if <00:31:49.748>you <00:31:49.875>build <00:31:50.003>all <00:31:50.130>that <00:31:50.257>stuff <00:31:50.385>with,

666
00:31:53.745 --> 00:31:56.645
<00:31:53.745>um, <00:31:53.945>faint <00:31:54.145>client <00:31:54.344>as <00:31:54.544>HDP <00:31:54.745>client, <00:31:54.945>you'll <00:31:55.145>see

667
00:31:56.645 --> 00:31:58.805
<00:31:56.645>that <00:31:56.845>it <00:31:57.045>starts <00:31:57.245>in <00:31:57.445>one <00:31:57.645>to <00:31:57.845>two <00:31:58.045>seconds.

668
00:31:59.435 --> 00:32:01.685
<00:31:59.435>Okay? <00:31:59.668>So <00:31:59.901>it's <00:32:00.135>a <00:32:00.368>little <00:32:00.601>bit <00:32:00.835>slow.

669
00:32:03.065 --> 00:32:04.565
<00:32:03.065>If <00:32:03.233>we <00:32:03.402>take <00:32:03.571>a <00:32:03.740>look <00:32:03.908>at <00:32:04.077>the <00:32:04.246>Charles <00:32:04.415>eyes,

670
00:32:04.565 --> 00:32:06.925
<00:32:04.565>the <00:32:04.740>Charles <00:32:04.915>eyes <00:32:05.090>from <00:32:05.265>micro <00:32:05.440>has <00:32:05.615>like <00:32:05.790>15 <00:32:05.965>megabytes,

671
00:32:07.025 --> 00:32:10.165
<00:32:07.025>and <00:32:07.200>this <00:32:07.375>is <00:32:07.550>a <00:32:07.725>screenshot <00:32:07.900>from <00:32:08.075>the <00:32:08.250>visual <00:32:08.425>VMs

672
00:32:10.165 --> 00:32:11.565
<00:32:10.165>or <00:32:10.375>profile <00:32:10.585>that <00:32:10.795>stuff <00:32:11.005>a <00:32:11.215>little <00:32:11.425>bit.

673
00:32:12.065 --> 00:32:15.485
<00:32:12.065>And <00:32:12.265>you'll <00:32:12.465>see <00:32:12.665>that <00:32:12.865>the, <00:32:13.065>the <00:32:13.265>used, <00:32:13.465>um,

674
00:32:15.485 --> 00:32:19.965
<00:32:15.485>memory <00:32:15.718>here <00:32:15.951>is <00:32:16.185>like <00:32:16.418>56 <00:32:16.651>56 <00:32:16.885>megabytes.

675
00:32:20.305 --> 00:32:23.685
<00:32:20.305>If <00:32:20.480>you <00:32:20.655>do, <00:32:20.830>um, <00:32:21.005>a <00:32:21.180>benchmark <00:32:21.355>with, <00:32:21.530>uh, <00:32:21.705>WRK,

676
00:32:23.685 --> 00:32:28.165
<00:32:23.685>which <00:32:23.825>is <00:32:23.965>benchmark <00:32:24.105>tool, <00:32:24.245>um, <00:32:24.385>you'll <00:32:24.524>see <00:32:24.665>that <00:32:24.804>this <00:32:24.945>thing <00:32:25.085>here

677
00:32:28.595 --> 00:32:32.485
<00:32:28.595>with, <00:32:28.711>um, <00:32:28.828>I <00:32:28.945>think <00:32:29.061>I <00:32:29.178>gave, <00:32:29.295>I <00:32:29.411>gave <00:32:29.528>it <00:32:29.645>512 <00:32:29.761>megabyte <00:32:29.878>of <00:32:29.995>heap,

678
00:32:33.025 --> 00:32:36.885
<00:32:33.025>um, <00:32:33.200>is, <00:32:33.375>is <00:32:33.550>doing <00:32:33.725>like <00:32:33.900>90,000 <00:32:34.075>requests <00:32:34.250>per <00:32:34.425>second,

679
00:32:37.615 --> 00:32:40.725
<00:32:37.615>which <00:32:37.770>should <00:32:37.926>be <00:32:38.081>enough <00:32:38.237>if <00:32:38.392>you <00:32:38.548>do <00:32:38.703>the <00:32:38.859>same <00:32:39.015>thing

680
00:32:40.725 --> 00:32:42.365
<00:32:40.725>with <00:32:40.958>spring <00:32:41.191>boots <00:32:41.425>or <00:32:41.658>the <00:32:41.891>same <00:32:42.125>application.

681
00:32:42.585 --> 00:32:46.285
<00:32:42.585>The <00:32:42.760>JAR <00:32:42.935>file <00:32:43.110>is <00:32:43.285>like <00:32:43.460>36, <00:32:43.635>uh, <00:32:43.810>30 <00:32:43.985>megabytes.

682
00:32:46.285 --> 00:32:50.165
<00:32:46.285>So <00:32:46.440>it's <00:32:46.596>um, <00:32:46.751>two, <00:32:46.907>two <00:32:47.062>and <00:32:47.218>a <00:32:47.373>half <00:32:47.529>times <00:32:47.685>bigger.

683
00:32:50.625 --> 00:32:52.685
<00:32:50.625>The, <00:32:51.091>um, <00:32:51.558>the <00:32:52.025>jar

684
00:32:52.745 --> 00:32:56.245
<00:32:52.745>and <00:32:52.872>the <00:32:52.999>used <00:32:53.126>applica, <00:32:53.254>the, <00:32:53.381>the <00:32:53.508>used <00:32:53.635>tip <00:32:53.763>you <00:32:53.890>see <00:32:54.017>here, <00:32:54.145>it's,

685
00:32:56.585 --> 00:32:59.645
<00:32:56.585>um, <00:32:56.785>on <00:32:56.985>like <00:32:57.185>after <00:32:57.385>a <00:32:57.585>garbage <00:32:57.785>collection, <00:32:57.985>30,

686
00:32:59.745 --> 00:33:02.805
<00:32:59.745>but <00:33:00.024>it <00:33:00.304>peaks <00:33:00.584>to <00:33:00.864>like <00:33:01.145>80

687
00:33:03.545 --> 00:33:06.805
<00:33:03.545>and <00:33:03.700>here <00:33:03.856>it <00:33:04.011>peaks <00:33:04.167>to <00:33:04.322>like <00:33:04.478>80 <00:33:04.633>or <00:33:04.789>90 <00:33:04.945>old.

688
00:33:06.835 --> 00:33:09.925
<00:33:06.835>They <00:33:07.068>are <00:33:07.301>roughly <00:33:07.535>comparable <00:33:07.768>from <00:33:08.001>the <00:33:08.235>usage

689
00:33:09.985 --> 00:33:11.485
<00:33:09.985>of <00:33:10.254>the, <00:33:10.524>the <00:33:10.794>RAM <00:33:11.064>when <00:33:11.334>running.

690
00:33:13.065 --> 00:33:15.325
<00:33:13.065>If <00:33:13.298>we <00:33:13.531>are <00:33:13.765>doing <00:33:13.998>the <00:33:14.231>same <00:33:14.465>benchmark

691
00:33:16.035 --> 00:33:17.965
<00:33:16.035>against <00:33:16.315>the <00:33:16.595>spring <00:33:16.875>boot <00:33:17.155>application <00:33:17.435>here.

692
00:33:18.025 --> 00:33:22.005
<00:33:18.025>So <00:33:18.180>the, <00:33:18.336>the <00:33:18.491>spring <00:33:18.647>boot <00:33:18.802>application <00:33:18.958>is <00:33:19.113>doing, <00:33:19.269>uh, <00:33:19.425>um,

693
00:33:22.375 --> 00:33:24.405
7,000

694
00:33:24.465 --> 00:33:28.495
<00:33:24.465>and, <00:33:24.814>uh, <00:33:25.165>72,000 <00:33:25.514>requests <00:33:25.865>compared

695
00:33:28.495 --> 00:33:30.495
<00:33:28.495>to <00:33:28.774>the <00:33:29.054>92,000 <00:33:29.334>requests <00:33:29.614>from <00:33:29.895>Micron.

696
00:33:30.495 --> 00:33:31.855
<00:33:30.495>So <00:33:30.903>it's <00:33:31.311>20,000 <00:33:31.719>less,

697
00:33:31.915 --> 00:33:35.655
<00:33:31.915>but <00:33:32.195>yeah, <00:33:32.475>it's, <00:33:32.754>it's <00:33:33.034>dead <00:33:33.315>enough.

698
00:33:36.795 --> 00:33:40.575
<00:33:36.795>So <00:33:36.902>then <00:33:37.010>I <00:33:37.118>got <00:33:37.225>interested <00:33:37.333>in <00:33:37.441>how <00:33:37.548>much <00:33:37.656>ramm <00:33:37.764>do <00:33:37.871>I <00:33:37.979>have <00:33:38.087>to <00:33:38.195>use?

699
00:33:40.755 --> 00:33:43.135
<00:33:40.755>So <00:33:41.035>micro <00:33:41.315>node, <00:33:41.595>maybe <00:33:41.875>they, <00:33:42.155>they

700
00:33:43.795 --> 00:33:46.575
<00:33:43.795>use <00:33:43.970>less <00:33:44.145>ram <00:33:44.320>if <00:33:44.495>I <00:33:44.670>put <00:33:44.845>down <00:33:45.020>the <00:33:45.195>heap.

701
00:33:46.675 --> 00:33:49.655
<00:33:46.675>So <00:33:46.802>I <00:33:46.929>tested <00:33:47.056>it, <00:33:47.184>I <00:33:47.311>started <00:33:47.438>it <00:33:47.565>with <00:33:47.693>32 <00:33:47.820>megabytes <00:33:47.947>of <00:33:48.075>heap

702
00:33:49.675 --> 00:33:51.175
<00:33:49.675>and <00:33:49.945>it <00:33:50.215>starts <00:33:50.485>and <00:33:50.754>it <00:33:51.024>works.

703
00:33:51.435 --> 00:33:53.695
<00:33:51.435>So <00:33:51.668>this <00:33:51.901>is <00:33:52.135>just <00:33:52.368>32 <00:33:52.601>megabyte <00:33:52.835>heap

704
00:33:54.115 --> 00:33:58.415
<00:33:54.115>and <00:33:54.315>it <00:33:54.515>still <00:33:54.715>does <00:33:54.915>57,000 <00:33:55.115>requests <00:33:55.315>per <00:33:55.515>second.

705
00:33:59.015 --> 00:34:01.655
<00:33:59.015>I <00:33:59.170>tried <00:33:59.326>the <00:33:59.481>same <00:33:59.637>with <00:33:59.792>spring, <00:33:59.948>and <00:34:00.103>spring <00:34:00.259>also <00:34:00.415>works

706
00:34:02.115 --> 00:34:04.375
<00:34:02.115>and <00:34:02.348>it, <00:34:02.581>it <00:34:02.815>does <00:34:03.048>like <00:34:03.281>30,000 <00:34:03.515>requests.

707
00:34:04.375 --> 00:34:07.695
<00:34:04.375>So <00:34:04.550>it's, <00:34:04.725>you <00:34:04.900>can <00:34:05.075>compress <00:34:05.250>the <00:34:05.425>heap <00:34:05.600>down <00:34:05.775>to,

708
00:34:08.275 --> 00:34:11.095
<00:34:08.275>to <00:34:08.475>like <00:34:08.675>32 <00:34:08.875>megabytes <00:34:09.075>and <00:34:09.275>it's <00:34:09.475>still <00:34:09.675>works.

709
00:34:11.715 --> 00:34:14.895
<00:34:11.715>So <00:34:11.948>there <00:34:12.181>are <00:34:12.415>more, <00:34:12.648>more, <00:34:12.881>um, <00:34:13.115>benchmarks,

710
00:34:14.915 --> 00:34:16.575
<00:34:14.915>but <00:34:15.264>um, <00:34:15.614>in <00:34:15.965>every <00:34:16.315>benchmark

711
00:34:17.305 --> 00:34:20.695
<00:34:17.304>micro <00:34:17.480>node <00:34:17.654>is <00:34:17.830>essentially <00:34:18.004>faster <00:34:18.179>than <00:34:18.355>spring <00:34:18.529>boot <00:34:18.705>from

712
00:34:21.555 --> 00:34:26.015
<00:34:21.554>the <00:34:21.730>startup <00:34:21.904>time <00:34:22.080>and <00:34:22.254>from <00:34:22.429>the, <00:34:22.605>the <00:34:22.779>throughput, <00:34:22.955>okay?

713
00:34:26.115 --> 00:34:28.855
<00:34:26.114>On <00:34:26.290>memory <00:34:26.464>side, <00:34:26.639>they <00:34:26.814>are <00:34:26.989>roughly <00:34:27.165>comparable <00:34:27.339>the <00:34:27.514>same.

714
00:34:31.545 --> 00:34:35.435
<00:34:31.545>Okay? <00:34:31.778>So <00:34:32.011>another <00:34:32.245>interesting <00:34:32.478>thing <00:34:32.711>is <00:34:32.945>degra,

715
00:34:38.305 --> 00:34:43.205
<00:34:38.304>not <00:34:38.412>sure <00:34:38.520>of <00:34:38.628>if <00:34:38.735>you've <00:34:38.843>heard <00:34:38.951>of <00:34:39.058>it, <00:34:39.166>but <00:34:39.274>Degra <00:34:39.381>VM <00:34:39.489>is <00:34:39.597>a <00:34:39.705>lot.

716
00:34:44.075 --> 00:34:45.725
<00:34:44.074>It's <00:34:44.355>a <00:34:44.634>high <00:34:44.915>performance <00:34:45.194>polyglot <00:34:45.475>V

717
00:34:45.725 --> 00:34:50.325
<00:34:45.725>and <00:34:45.924>more, <00:34:46.125>um, <00:34:46.324>languages <00:34:46.525>like <00:34:46.725>Ruby <00:34:46.924>and <00:34:47.125>Earl

718
00:34:50.605 --> 00:34:54.125
<00:34:50.605>and <00:34:50.721>stuff <00:34:50.838>like <00:34:50.955>that <00:34:51.071>on <00:34:51.188>top <00:34:51.304>of <00:34:51.421>the, <00:34:51.538>of <00:34:51.655>the, <00:34:51.771>of <00:34:51.888>the <00:34:52.005>Ian.

719
00:34:55.225 --> 00:34:56.445
<00:34:55.225>But <00:34:55.774>the, <00:34:56.323>I,

720
00:34:56.645 --> 00:34:59.645
<00:34:56.645>I <00:34:56.772>think <00:34:56.899>the <00:34:57.026>most <00:34:57.154>important <00:34:57.281>thing <00:34:57.408>is <00:34:57.535>the <00:34:57.663>A <00:34:57.790>o <00:34:57.917>OT <00:34:58.045>compiler,

721
00:34:59.645 --> 00:35:02.165
<00:34:59.645>which <00:34:59.878>essentially <00:35:00.111>takes <00:35:00.345>your <00:35:00.578>Java <00:35:00.811>by <00:35:01.045>code

722
00:35:02.465 --> 00:35:04.165
<00:35:02.465>and <00:35:02.815>outputs <00:35:03.165>a <00:35:03.515>native <00:35:03.865>image.

723
00:35:04.635 --> 00:35:09.285
<00:35:04.635>This <00:35:04.790>is <00:35:04.946>native <00:35:05.101>compiled <00:35:05.257>to <00:35:05.412>your <00:35:05.568>applic <00:35:05.723>to <00:35:05.879>your <00:35:06.035>architecture,

724
00:35:09.505 --> 00:35:12.325
<00:35:09.505>and <00:35:09.645>you <00:35:09.785>can <00:35:09.925>run <00:35:10.065>it <00:35:10.205>without <00:35:10.345>having <00:35:10.485>access <00:35:10.625>to <00:35:10.765>A <00:35:10.905>JVM.

725
00:35:12.325 --> 00:35:16.005
<00:35:12.325>So <00:35:12.452>you <00:35:12.579>don't <00:35:12.706>need <00:35:12.834>a <00:35:12.961>JVM <00:35:13.088>to <00:35:13.215>run <00:35:13.343>it. <00:35:13.470>It's <00:35:13.597>very <00:35:13.725>interesting.

726
00:35:17.015 --> 00:35:18.275
<00:35:17.015>But <00:35:17.203>one <00:35:17.393>of <00:35:17.582>the <00:35:17.771>big <00:35:17.960>pain <00:35:18.149>points

727
00:35:18.275 --> 00:35:20.475
<00:35:18.275>with <00:35:18.508>dry <00:35:18.741>VM <00:35:18.975>is, <00:35:19.208>uh, <00:35:19.441>reflection <00:35:19.675>stuff.

728
00:35:20.775 --> 00:35:23.755
<00:35:20.775>So <00:35:20.915>if <00:35:21.055>you <00:35:21.195>do <00:35:21.335>reflection <00:35:21.475>stuff, <00:35:21.615>the <00:35:21.755>raw <00:35:21.895>VM <00:35:22.035>closed, <00:35:22.175>uh,

729
00:35:23.755 --> 00:35:25.755
<00:35:23.755>world <00:35:24.035>analysis <00:35:24.315>doesn't <00:35:24.595>find <00:35:24.875>the <00:35:25.155>class,

730
00:35:25.775 --> 00:35:28.275
<00:35:25.775>it <00:35:25.975>doesn't <00:35:26.175>include <00:35:26.375>it <00:35:26.575>into <00:35:26.775>your <00:35:26.975>native <00:35:27.175>image

731
00:35:28.275 --> 00:35:30.995
<00:35:28.275>and <00:35:28.475>then <00:35:28.675>fades <00:35:28.875>at <00:35:29.075>random, <00:35:29.275>but <00:35:29.475>micro <00:35:29.675>node,

732
00:35:31.715 --> 00:35:33.965
<00:35:31.715>thus <00:35:31.995>they <00:35:32.275>are <00:35:32.555>not <00:35:32.835>doing <00:35:33.115>reflections.

733
00:35:34.025 --> 00:35:37.525
<00:35:34.025>So <00:35:34.225>it <00:35:34.425>should <00:35:34.625>be <00:35:34.825>theoretically <00:35:35.025>possible <00:35:35.225>to <00:35:35.425>compile

734
00:35:37.755 --> 00:35:39.765
<00:35:37.755>that <00:35:38.035>stuff <00:35:38.315>into <00:35:38.595>a <00:35:38.875>native <00:35:39.155>image.

735
00:35:41.945 --> 00:35:46.885
<00:35:41.945>So <00:35:42.061>I <00:35:42.178>just <00:35:42.295>first <00:35:42.411>installed <00:35:42.528>the <00:35:42.645>gray <00:35:42.761>vm, <00:35:42.878>the <00:35:42.995>graph <00:35:43.111>VM <00:35:43.228>with <00:35:43.345>um,

736
00:35:47.325 --> 00:35:49.205
<00:35:47.325>SDK, <00:35:47.605>with <00:35:47.884>the <00:35:48.165>SDK <00:35:48.444>man <00:35:48.725>tool.

737
00:35:49.205 --> 00:35:50.765
<00:35:49.205>Then <00:35:49.438>I <00:35:49.671>installed <00:35:49.904>the <00:35:50.138>native <00:35:50.371>image <00:35:50.605>tool,

738
00:35:50.765 --> 00:35:53.965
<00:35:50.765>and <00:35:50.881>then <00:35:50.998>you <00:35:51.115>can <00:35:51.231>run <00:35:51.348>gray <00:35:51.464>w <00:35:51.581>native <00:35:51.698>image <00:35:51.815>and <00:35:51.931>all <00:35:52.048>that <00:35:52.165>stuff.

739
00:35:54.305 --> 00:35:57.325
<00:35:54.305>Um, <00:35:54.585>is <00:35:54.865>now <00:35:55.145>it's <00:35:55.424>boots <00:35:55.705>dem,

740
00:35:57.355 --> 00:35:59.405
<00:35:57.355>it's <00:35:57.555>compiling <00:35:57.755>all <00:35:57.955>your <00:35:58.155>stuff <00:35:58.355>to <00:35:58.555>native <00:35:58.755>image.

741
00:35:59.745 --> 00:36:02.205
<00:35:59.745>And <00:35:59.900>two <00:36:00.056>minutes <00:36:00.211>later <00:36:00.367>though <00:36:00.522>it <00:36:00.678>takes <00:36:00.833>like <00:36:00.989>two <00:36:01.145>minutes

742
00:36:02.265 --> 00:36:04.005
<00:36:02.265>and <00:36:02.498>a <00:36:02.731>lot <00:36:02.964>of <00:36:03.198>ram <00:36:03.431>to <00:36:03.665>generate

743
00:36:04.565 --> 00:36:06.925
<00:36:04.565>a <00:36:04.765>native <00:36:04.965>image <00:36:05.165>from <00:36:05.365>your <00:36:05.565>Java <00:36:05.765>byte <00:36:05.965>code.

744
00:36:07.675 --> 00:36:09.445
<00:36:07.675>Then <00:36:07.955>it <00:36:08.235>outputs <00:36:08.515>an <00:36:08.795>application <00:36:09.075>file,

745
00:36:09.445 --> 00:36:10.845
<00:36:09.445>which <00:36:09.760>is <00:36:10.075>just <00:36:10.390>called <00:36:10.705>application.

746
00:36:12.465 --> 00:36:15.205
<00:36:12.465>Um, <00:36:12.745>and <00:36:13.025>here <00:36:13.305>you <00:36:13.585>can, <00:36:13.865>um,

747
00:36:15.565 --> 00:36:18.445
<00:36:15.565>I <00:36:15.705>I <00:36:15.845>use <00:36:15.985>the <00:36:16.125>file <00:36:16.265>tool <00:36:16.405>from <00:36:16.545>from <00:36:16.685>Linux <00:36:16.825>to <00:36:16.965>see

748
00:36:18.555 --> 00:36:19.805
<00:36:18.555>what <00:36:18.930>is <00:36:19.305>this <00:36:19.680>thing.

749
00:36:19.905 --> 00:36:23.365
<00:36:19.905>And <00:36:20.060>here <00:36:20.216>you <00:36:20.371>see <00:36:20.527>it's <00:36:20.682>really <00:36:20.838>a <00:36:20.993>64 <00:36:21.149>bit <00:36:21.305>executable

750
00:36:23.925 --> 00:36:25.245
<00:36:23.925>compiled <00:36:24.519>for <00:36:25.113>Linux.

751
00:36:25.795 --> 00:36:29.205
<00:36:25.795>Okay? <00:36:25.935>So <00:36:26.075>this <00:36:26.215>thing <00:36:26.355>does <00:36:26.495>not <00:36:26.635>need <00:36:26.775>an <00:36:26.915>JVM <00:36:27.055>to <00:36:27.195>run.

752
00:36:29.305 --> 00:36:32.725
<00:36:29.305>You <00:36:29.444>can <00:36:29.585>just <00:36:29.725>run <00:36:29.865>it, <00:36:30.004>it <00:36:30.145>has <00:36:30.285>62 <00:36:30.424>megabytes <00:36:30.565>in <00:36:30.705>it,

753
00:36:33.025 --> 00:36:37.005
<00:36:33.025>so <00:36:33.152>it's <00:36:33.279>62 <00:36:33.406>megabytes <00:36:33.534>big, <00:36:33.661>and <00:36:33.788>then <00:36:33.915>you <00:36:34.043>can <00:36:34.170>just <00:36:34.297>run <00:36:34.425>it.

754
00:36:37.025 --> 00:36:39.685
<00:36:37.025>If <00:36:37.200>you <00:36:37.375>take <00:36:37.550>a <00:36:37.725>look <00:36:37.900>at <00:36:38.075>against <00:36:38.250>which <00:36:38.425>libraries,

755
00:36:39.685 --> 00:36:41.525
<00:36:39.685>the <00:36:39.965>stuff <00:36:40.245>links, <00:36:40.525>it's <00:36:40.805>like <00:36:41.085>the,

756
00:36:41.745 --> 00:36:45.325
<00:36:41.745>the <00:36:41.872>stuff <00:36:41.999>which <00:36:42.126>you <00:36:42.254>normally <00:36:42.381>have <00:36:42.508>on <00:36:42.635>your <00:36:42.763>system <00:36:42.890>like <00:36:43.017>lip <00:36:43.145>C

757
00:36:45.545 --> 00:36:47.045
<00:36:45.545>uh, <00:36:45.737>lip <00:36:45.930>P <00:36:46.123>thread <00:36:46.316>and <00:36:46.509>stuff <00:36:46.702>like <00:36:46.895>that.

758
00:36:47.345 --> 00:36:51.605
<00:36:47.345>So <00:36:47.484>it <00:36:47.625>doesn't <00:36:47.765>need <00:36:47.904>any <00:36:48.044>JVM <00:36:48.185>libraries <00:36:48.325>or <00:36:48.464>stuff <00:36:48.605>like <00:36:48.745>that.

759
00:36:51.625 --> 00:36:53.485
<00:36:51.625>It <00:36:51.858>just <00:36:52.091>links <00:36:52.325>against <00:36:52.558>your <00:36:52.791>Linux <00:36:53.025>system

760
00:36:53.505 --> 00:36:56.365
<00:36:53.505>and <00:36:53.632>then <00:36:53.759>you <00:36:53.886>can <00:36:54.014>run <00:36:54.141>it <00:36:54.268>without <00:36:54.395>JVM, <00:36:54.523>which <00:36:54.650>is <00:36:54.777>quite <00:36:54.905>cool.

761
00:36:58.185 --> 00:37:01.045
<00:36:58.185>What's <00:36:58.384>even <00:36:58.585>cooler <00:36:58.785>is <00:36:58.985>when <00:36:59.185>you <00:36:59.384>see <00:36:59.585>how

762
00:37:01.595 --> 00:37:03.525
<00:37:01.595>fast <00:37:01.944>this <00:37:02.294>thing <00:37:02.645>starts, <00:37:02.995>okay?

763
00:37:03.585 --> 00:37:06.365
<00:37:03.585>The <00:37:03.760>startup <00:37:03.935>completed <00:37:04.110>in <00:37:04.285>six <00:37:04.460>seven <00:37:04.635>mega <00:37:04.810>uh, <00:37:04.985>milliseconds.

764
00:37:06.585 --> 00:37:10.845
<00:37:06.585>So <00:37:06.760>it <00:37:06.935>takes <00:37:07.110>67 <00:37:07.285>milliseconds <00:37:07.460>to <00:37:07.635>start <00:37:07.810>your <00:37:07.985>application

765
00:37:10.905 --> 00:37:13.405
<00:37:10.905>and <00:37:11.080>then <00:37:11.255>you <00:37:11.430>can <00:37:11.605>file <00:37:11.780>requests <00:37:11.955>against <00:37:12.130>it, <00:37:12.305>okay?

766
00:37:14.185 --> 00:37:18.205
<00:37:14.185>If <00:37:14.325>you <00:37:14.465>start <00:37:14.605>it, <00:37:14.745>it <00:37:14.884>takes <00:37:15.025>like <00:37:15.165>92 <00:37:15.305>megabytes <00:37:15.445>of, <00:37:15.585>um,

767
00:37:18.745 --> 00:37:20.405
<00:37:18.745>of <00:37:19.025>RAM <00:37:19.305>from <00:37:19.585>your <00:37:19.865>Linux <00:37:20.145>system,

768
00:37:21.145 --> 00:37:25.645
<00:37:21.145>and <00:37:21.272>if <00:37:21.399>you, <00:37:21.526>um, <00:37:21.654>put <00:37:21.781>it <00:37:21.908>under <00:37:22.035>load, <00:37:22.163>you <00:37:22.290>have, <00:37:22.417>uh, <00:37:22.545>700

769
00:37:25.745 --> 00:37:27.325
<00:37:25.745>and <00:37:26.211>something <00:37:26.678>megabyte <00:37:27.145>used.

770
00:37:29.315 --> 00:37:32.645
<00:37:29.315>Okay? <00:37:29.442>So <00:37:29.569>it's, <00:37:29.696>it's, <00:37:29.824>it's, <00:37:29.951>it's <00:37:30.078>really <00:37:30.205>cool <00:37:30.333>if <00:37:30.460>you <00:37:30.587>need, <00:37:30.715>um,

771
00:37:34.315 --> 00:37:36.485
<00:37:34.315>fast <00:37:34.665>startup <00:37:35.015>with <00:37:35.365>Java <00:37:35.715>application,

772
00:37:36.975 --> 00:37:39.285
<00:37:36.975>maybe <00:37:37.130>you <00:37:37.286>should <00:37:37.441>take <00:37:37.597>a <00:37:37.752>look <00:37:37.908>at <00:37:38.063>the <00:37:38.219>M <00:37:38.375>stuff

773
00:37:39.285 --> 00:37:42.445
<00:37:39.285>because <00:37:39.518>the <00:37:39.751>m <00:37:39.984>it <00:37:40.218>essentially <00:37:40.451>compiles <00:37:40.685>your

774
00:37:43.235 --> 00:37:44.845
<00:37:43.235>Java <00:37:43.515>bytecode <00:37:43.795>to <00:37:44.075>a <00:37:44.355>native <00:37:44.635>image.

775
00:37:45.185 --> 00:37:47.845
<00:37:45.185>And <00:37:45.418>this <00:37:45.651>native <00:37:45.884>image <00:37:46.118>is <00:37:46.351>really <00:37:46.585>fast.

776
00:37:47.985 --> 00:37:49.405
<00:37:47.985>It <00:37:48.304>starts <00:37:48.624>up <00:37:48.943>really <00:37:49.263>fast.

777
00:37:50.305 --> 00:37:52.525
<00:37:50.305>So <00:37:50.480>we <00:37:50.654>did <00:37:50.830>a <00:37:51.004>benchmark <00:37:51.180>against <00:37:51.355>the <00:37:51.529>native <00:37:51.705>image

778
00:37:52.545 --> 00:37:55.805
<00:37:52.545>and <00:37:52.672>to <00:37:52.799>see <00:37:52.926>the <00:37:53.054>throughput <00:37:53.181>from <00:37:53.308>this <00:37:53.435>native <00:37:53.563>image <00:37:53.690>is <00:37:53.817>a <00:37:53.945>little

779
00:37:55.865 --> 00:37:58.885
<00:37:55.865>bit <00:37:56.040>less <00:37:56.214>than, <00:37:56.390>or <00:37:56.564>it's <00:37:56.740>not <00:37:56.915>a <00:37:57.089>little <00:37:57.265>bit,

780
00:37:58.905 --> 00:38:01.525
<00:37:58.905>but <00:37:59.138>it's <00:37:59.371>less <00:37:59.605>than <00:37:59.838>the <00:38:00.071>JVM <00:38:00.305>stuff

781
00:38:01.525 --> 00:38:03.805
<00:38:01.525>because, <00:38:01.758>uh, <00:38:01.991>the <00:38:02.225>JVM <00:38:02.458>also <00:38:02.691>does <00:38:02.925>runtime

782
00:38:03.805 --> 00:38:05.245
<00:38:03.805>optimizations <00:38:04.129>and <00:38:04.453>stuff <00:38:04.777>like <00:38:05.100>that.

783
00:38:05.985 --> 00:38:09.005
<00:38:05.985>Um, <00:38:06.125>but <00:38:06.265>the <00:38:06.405>GRA <00:38:06.545>VM <00:38:06.685>team <00:38:06.825>is <00:38:06.965>working <00:38:07.105>on <00:38:07.245>that <00:38:07.385>so

784
00:38:09.005 --> 00:38:12.205
<00:38:09.005>that <00:38:09.145>this <00:38:09.285>stuff, <00:38:09.425>uh, <00:38:09.565>even <00:38:09.705>gets <00:38:09.845>faster <00:38:09.985>in <00:38:10.125>a <00:38:10.265>native <00:38:10.405>image.

785
00:38:13.465 --> 00:38:17.045
<00:38:13.465>So <00:38:13.581>GRA <00:38:13.698>VM <00:38:13.815>is <00:38:13.931>a <00:38:14.048>really <00:38:14.165>cool <00:38:14.281>tool, <00:38:14.398>uh, <00:38:14.515>to <00:38:14.631>be <00:38:14.748>fair, <00:38:14.865>um,

786
00:38:17.425 --> 00:38:22.365
<00:38:17.425>spring <00:38:17.600>is <00:38:17.775>also <00:38:17.950>working <00:38:18.125>on <00:38:18.300>gra <00:38:18.475>VM <00:38:18.650>compatibility <00:38:18.825>with,

787
00:38:22.425 --> 00:38:25.405
<00:38:22.425>uh, <00:38:22.658>spring <00:38:22.891>native <00:38:23.125>project, <00:38:23.358>which <00:38:23.591>is <00:38:23.825>essentially

788
00:38:26.015 --> 00:38:30.445
<00:38:26.015>doing <00:38:26.190>all <00:38:26.365>magic <00:38:26.540>that, <00:38:26.714>that <00:38:26.890>spring <00:38:27.065>can <00:38:27.240>work <00:38:27.415>together

789
00:38:30.445 --> 00:38:34.245
<00:38:30.445>with <00:38:30.585>the <00:38:30.725>gravity <00:38:30.865>so <00:38:31.005>you <00:38:31.145>can <00:38:31.285>in <00:38:31.425>the <00:38:31.565>future <00:38:31.705>compiler <00:38:31.845>spring

790
00:38:34.245 --> 00:38:37.805
<00:38:34.245>application <00:38:34.420>into <00:38:34.595>a <00:38:34.770>native <00:38:34.944>image, <00:38:35.120>which <00:38:35.295>is <00:38:35.470>quite <00:38:35.645>cool.

791
00:38:39.435 --> 00:38:43.885
<00:38:39.435>Okay, <00:38:39.575>so <00:38:39.715>to <00:38:39.855>conclude <00:38:39.995>all <00:38:40.134>that <00:38:40.275>stuff, <00:38:40.415>we <00:38:40.555>did <00:38:40.695>a <00:38:40.835>project

792
00:38:43.995 --> 00:38:45.485
<00:38:43.995>with <00:38:44.330>micro <00:38:44.665>node <00:38:45.000>and <00:38:45.336>this,

793
00:38:45.535 --> 00:38:47.285
<00:38:45.535>these <00:38:45.815>are <00:38:46.095>the <00:38:46.375>conclusions <00:38:46.654>from <00:38:46.935>that.

794
00:38:47.425 --> 00:38:48.805
<00:38:47.425>So <00:38:47.673>the, <00:38:47.921>on <00:38:48.170>the <00:38:48.418>pro <00:38:48.667>side,

795
00:38:48.805 --> 00:38:50.805
<00:38:48.805>the <00:38:49.004>service <00:38:49.205>starts <00:38:49.404>really <00:38:49.605>faster <00:38:49.805>than <00:38:50.004>Spring <00:38:50.205>boot.

796
00:38:50.825 --> 00:38:52.125
<00:38:50.825>So <00:38:51.214>this, <00:38:51.605>um, <00:38:51.995>works.

797
00:38:52.505 --> 00:38:56.125
<00:38:52.505>The <00:38:52.645>JAR <00:38:52.785>files <00:38:52.925>are <00:38:53.065>smaller, <00:38:53.205>which <00:38:53.345>is <00:38:53.485>cool <00:38:53.625>if <00:38:53.765>you, <00:38:53.905>um,

798
00:38:56.635 --> 00:38:59.765
<00:38:56.635>like <00:38:56.835>smaller <00:38:57.035>dock <00:38:57.235>images, <00:38:57.435>the <00:38:57.635>tests <00:38:57.835>are <00:38:58.035>faster

799
00:38:59.765 --> 00:39:02.085
<00:38:59.765>because <00:38:59.998>the <00:39:00.231>embedded <00:39:00.464>server, <00:39:00.698>which <00:39:00.931>you <00:39:01.165>start

800
00:39:02.105 --> 00:39:03.765
<00:39:02.105>for <00:39:02.455>integration <00:39:02.805>testing <00:39:03.155>starts <00:39:03.505>faster.

801
00:39:04.385 --> 00:39:06.365
<00:39:04.385>But <00:39:04.585>you <00:39:04.785>have <00:39:04.985>to <00:39:05.185>say <00:39:05.385>spring <00:39:05.585>mitigates <00:39:05.785>this

802
00:39:06.365 --> 00:39:07.805
<00:39:06.365>with <00:39:06.796>application <00:39:07.229>context <00:39:07.661>caching.

803
00:39:07.805 --> 00:39:10.485
<00:39:07.805>So <00:39:07.944>if <00:39:08.085>you <00:39:08.225>don't, <00:39:08.365>uh, <00:39:08.504>fill <00:39:08.645>with <00:39:08.785>the <00:39:08.924>context <00:39:09.065>in <00:39:09.205>spring,

804
00:39:10.705 --> 00:39:14.005
<00:39:10.705>it <00:39:10.832>reuses <00:39:10.959>the <00:39:11.086>same <00:39:11.214>context <00:39:11.341>and <00:39:11.468>then <00:39:11.595>it's <00:39:11.723>at <00:39:11.850>least <00:39:11.977>as <00:39:12.105>fast.

805
00:39:14.865 --> 00:39:18.725
<00:39:14.865>On <00:39:15.020>the <00:39:15.176>contrast <00:39:15.331>side <00:39:15.487>there <00:39:15.642>is, <00:39:15.798>you <00:39:15.953>can't <00:39:16.109>separate <00:39:16.265>management

806
00:39:18.725 --> 00:39:20.565
<00:39:18.725>and <00:39:18.958>API <00:39:19.191>port, <00:39:19.424>which <00:39:19.658>is <00:39:19.891>a <00:39:20.125>problem.

807
00:39:20.745 --> 00:39:22.805
<00:39:20.745>If <00:39:21.211>your <00:39:21.678>security, <00:39:22.145>uh,

808
00:39:23.065 --> 00:39:25.125
<00:39:23.065>if <00:39:23.265>your <00:39:23.465>security <00:39:23.665>guys <00:39:23.865>tell <00:39:24.065>you <00:39:24.265>you <00:39:24.465>have

809
00:39:25.125 --> 00:39:26.725
<00:39:25.125>to <00:39:25.405>separate <00:39:25.685>management <00:39:25.965>and <00:39:26.245>API <00:39:26.525>ports,

810
00:39:26.835 --> 00:39:28.685
<00:39:26.835>then <00:39:27.185>you <00:39:27.535>can't <00:39:27.885>use <00:39:28.235>Micron.

811
00:39:29.425 --> 00:39:31.325
<00:39:29.425>Um, <00:39:29.705>spring <00:39:29.985>boot <00:39:30.265>is <00:39:30.545>more <00:39:30.825>common.

812
00:39:31.385 --> 00:39:33.245
<00:39:31.385>So <00:39:31.585>there <00:39:31.785>are <00:39:31.985>more <00:39:32.185>documentation, <00:39:32.385>more <00:39:32.585>block <00:39:32.785>flow,

813
00:39:33.245 --> 00:39:34.405
<00:39:33.245>small <00:39:33.593>stack <00:39:33.941>overflow <00:39:34.289>answers

814
00:39:34.555 --> 00:39:36.805
<00:39:34.555>because <00:39:34.754>Spring <00:39:34.955>Boot <00:39:35.154>is <00:39:35.355>just <00:39:35.555>the <00:39:35.754>big <00:39:35.955>kid

815
00:39:36.805 --> 00:39:37.845
<00:39:36.805>on <00:39:36.992>the <00:39:37.179>block <00:39:37.366>for <00:39:37.553>that <00:39:37.741>stuff.

816
00:39:38.795 --> 00:39:41.495
<00:39:38.795>And <00:39:38.935>I <00:39:39.075>think <00:39:39.215>the <00:39:39.355>extension <00:39:39.495>story <00:39:39.635>from <00:39:39.775>Spring <00:39:39.915>boot <00:39:40.055>is <00:39:40.195>better.

817
00:39:41.955 --> 00:39:46.455
<00:39:41.955>We, <00:39:42.095>um, <00:39:42.235>for <00:39:42.375>example, <00:39:42.515>needed <00:39:42.654>O <00:39:42.795>of <00:39:42.935>two <00:39:43.075>with <00:39:43.215>total <00:39:43.355>refreshes

818
00:39:46.515 --> 00:39:50.575
<00:39:46.515>and <00:39:46.670>it <00:39:46.826>turns <00:39:46.981>out <00:39:47.137>micro <00:39:47.292>node <00:39:47.448>security <00:39:47.603>has <00:39:47.759>not <00:39:47.915>implemented

819
00:39:50.575 --> 00:39:52.975
<00:39:50.575>that <00:39:50.750>stuff, <00:39:50.924>so <00:39:51.100>we <00:39:51.274>had <00:39:51.450>to <00:39:51.625>implement <00:39:51.799>it <00:39:51.975>ourself.

820
00:39:53.835 --> 00:39:58.455
<00:39:53.835>But, <00:39:53.990>um, <00:39:54.146>your <00:39:54.301>mileage <00:39:54.457>may <00:39:54.612>vary <00:39:54.768>if <00:39:54.923>you <00:39:55.079>need, <00:39:55.235>um,

821
00:39:58.755 --> 00:40:00.975
<00:39:58.755>if <00:39:58.930>you <00:39:59.105>don't <00:39:59.280>need <00:39:59.455>this, <00:39:59.630>give <00:39:59.805>it <00:39:59.980>a <00:40:00.155>try.

822
00:40:01.715 --> 00:40:04.215
<00:40:01.715>So <00:40:01.915>the <00:40:02.115>conclusion, <00:40:02.315>it <00:40:02.515>has <00:40:02.715>really <00:40:02.915>good <00:40:03.115>documentation.

823
00:40:04.335 --> 00:40:07.175
<00:40:04.335>I <00:40:04.535>really <00:40:04.735>like <00:40:04.935>the <00:40:05.135>macro <00:40:05.335>documentation <00:40:05.535>I <00:40:05.735>recommended

824
00:40:07.315 --> 00:40:09.655
<00:40:07.315>for <00:40:07.490>at <00:40:07.665>least <00:40:07.840>try <00:40:08.015>it <00:40:08.190>out <00:40:08.365>for <00:40:08.540>small <00:40:08.715>services

825
00:40:09.655 --> 00:40:11.935
<00:40:09.655>because <00:40:09.855>I <00:40:10.055>have <00:40:10.255>no <00:40:10.455>experience <00:40:10.655>with <00:40:10.855>bigger <00:40:11.055>services.

826
00:40:11.995 --> 00:40:14.815
<00:40:11.995>So <00:40:12.228>our <00:40:12.461>services <00:40:12.694>were <00:40:12.928>like <00:40:13.161>one <00:40:13.395>microservices,

827
00:40:14.915 --> 00:40:16.655
<00:40:14.915>one <00:40:15.148>business <00:40:15.381>domain <00:40:15.615>and <00:40:15.848>it <00:40:16.081>works <00:40:16.315>out.

828
00:40:16.755 --> 00:40:20.215
<00:40:16.755>But <00:40:16.930>maybe <00:40:17.105>you <00:40:17.280>put <00:40:17.455>like <00:40:17.630>30,000 <00:40:17.805>classes <00:40:17.980>in <00:40:18.155>there

829
00:40:20.235 --> 00:40:21.415
<00:40:20.235>and <00:40:20.500>then <00:40:20.766>it's <00:40:21.031>really <00:40:21.297>slow.

830
00:40:21.455 --> 00:40:24.415
<00:40:21.455>I <00:40:21.630>don't <00:40:21.805>know. <00:40:21.980>Um, <00:40:22.154>if <00:40:22.330>you <00:40:22.505>have <00:40:22.680>experiences <00:40:22.855>writing

831
00:40:25.035 --> 00:40:26.855
<00:40:25.035>big <00:40:25.268>services <00:40:25.501>in <00:40:25.734>micro, <00:40:25.968>please <00:40:26.201>contact <00:40:26.435>me.

832
00:40:26.935 --> 00:40:28.935
<00:40:26.935>I <00:40:27.110>would <00:40:27.285>be, <00:40:27.460>I <00:40:27.634>would <00:40:27.810>be, <00:40:27.985>are <00:40:28.160>very <00:40:28.335>interested.

833
00:40:29.475 --> 00:40:32.055
<00:40:29.475>The <00:40:29.708>development <00:40:29.941>is <00:40:30.174>fun. <00:40:30.408>Um, <00:40:30.641>good <00:40:30.875>augmentation.

834
00:40:32.115 --> 00:40:35.055
<00:40:32.115>It <00:40:32.348>starts <00:40:32.581>fast. <00:40:32.814>It's, <00:40:33.048>it's <00:40:33.281>just, <00:40:33.515>um,

835
00:40:35.435 --> 00:40:36.615
<00:40:35.435>no, <00:40:35.788>no <00:40:36.143>fris <00:40:36.497>development.

836
00:40:36.635 --> 00:40:37.815
<00:40:36.635>It <00:40:36.847>doesn't <00:40:37.059>go <00:40:37.272>into <00:40:37.484>your <00:40:37.697>way

837
00:40:38.235 --> 00:40:42.525
<00:40:38.235>and <00:40:38.362>if <00:40:38.489>the <00:40:38.616>feature <00:40:38.744>has <00:40:38.871>efficient, <00:40:38.998>just <00:40:39.125>try <00:40:39.253>it <00:40:39.380>out, <00:40:39.507>um, <00:40:39.635>to,

838
00:40:42.785 --> 00:40:46.605
<00:40:42.785>to <00:40:42.901>the, <00:40:43.018>um, <00:40:43.134>if <00:40:43.251>you <00:40:43.368>get <00:40:43.484>it <00:40:43.601>to <00:40:43.718>run, <00:40:43.835>it's <00:40:43.951>really, <00:40:44.068>really <00:40:44.185>cool.

839
00:40:46.905 --> 00:40:50.485
<00:40:46.905>So <00:40:47.045>the <00:40:47.185>gra <00:40:47.325>VM <00:40:47.465>native <00:40:47.605>image <00:40:47.745>is <00:40:47.885>a <00:40:48.025>really <00:40:48.165>cool <00:40:48.305>piece

840
00:40:50.485 --> 00:40:53.565
<00:40:50.485>of <00:40:50.640>technology, <00:40:50.796>but <00:40:50.951>be <00:40:51.107>aware, <00:40:51.262>this <00:40:51.418>is <00:40:51.573>not <00:40:51.729>a <00:40:51.885>JVM.

841
00:40:53.595 --> 00:40:55.965
<00:40:53.595>Okay? <00:40:53.794>So <00:40:53.995>if <00:40:54.194>this <00:40:54.395>stuff <00:40:54.595>crashes <00:40:54.794>in <00:40:54.995>production,

842
00:40:56.465 --> 00:40:59.045
<00:40:56.465>you <00:40:56.581>get <00:40:56.698>a <00:40:56.815>heat <00:40:56.931>dump, <00:40:57.048>you, <00:40:57.165>you <00:40:57.281>don't <00:40:57.398>get <00:40:57.515>heat <00:40:57.631>dumps, <00:40:57.748>you <00:40:57.865>get,

843
00:40:59.145 --> 00:41:01.165
<00:40:59.145>uh, <00:40:59.345>a <00:40:59.545>cord <00:40:59.745>dump <00:40:59.945>from <00:41:00.145>your <00:41:00.345>you <00:41:00.545>system

844
00:41:01.165 --> 00:41:04.405
<00:41:01.165>and <00:41:01.281>then <00:41:01.398>you <00:41:01.515>have <00:41:01.631>to <00:41:01.748>use <00:41:01.865>all <00:41:01.981>the <00:41:02.098>fancy <00:41:02.215>c <00:41:02.331>plus <00:41:02.448>plus <00:41:02.565>tools

845
00:41:04.705 --> 00:41:06.965
<00:41:04.705>to <00:41:04.880>find <00:41:05.055>those <00:41:05.230>text <00:41:05.404>traces <00:41:05.580>and <00:41:05.755>stuff <00:41:05.930>like <00:41:06.105>that.

846
00:41:07.195 --> 00:41:09.445
<00:41:07.195>Okay? <00:41:07.475>All, <00:41:07.755>so <00:41:08.035>the <00:41:08.315>profiles, <00:41:08.595>uh,

847
00:41:09.895 --> 00:41:11.325
<00:41:09.895>won't <00:41:10.152>work <00:41:10.409>with <00:41:10.667>a <00:41:10.924>native <00:41:11.182>image.

848
00:41:12.235 --> 00:41:14.205
<00:41:12.235>Okay? <00:41:12.515>Just, <00:41:12.795>it <00:41:13.075>just <00:41:13.355>isn't <00:41:13.635>there.

849
00:41:14.745 --> 00:41:16.485
<00:41:14.745>The <00:41:14.944>build <00:41:15.145>times <00:41:15.345>from <00:41:15.545>native <00:41:15.745>image, <00:41:15.944>it's <00:41:16.145>like,

850
00:41:16.595 --> 00:41:19.645
<00:41:16.595>like <00:41:16.750>it's <00:41:16.906>c <00:41:17.061>plus <00:41:17.217>plus, <00:41:17.372>so <00:41:17.528>30 <00:41:17.683>seconds <00:41:17.839>and <00:41:17.995>upward,

851
00:41:20.545 --> 00:41:22.645
<00:41:20.545>and <00:41:20.825>not <00:41:21.105>all <00:41:21.385>libraries <00:41:21.665>are <00:41:21.945>compatible,

852
00:41:23.585 --> 00:41:26.045
<00:41:23.585>so <00:41:23.818>you <00:41:24.051>can't <00:41:24.285>take <00:41:24.518>any <00:41:24.751>Java <00:41:24.985>application

853
00:41:26.045 --> 00:41:27.445
<00:41:26.045>and <00:41:26.297>compile <00:41:26.549>it <00:41:26.801>to <00:41:27.053>native <00:41:27.305>image.

854
00:41:28.065 --> 00:41:31.765
<00:41:28.065>Um, <00:41:28.220>the, <00:41:28.376>the <00:41:28.531>libraries <00:41:28.687>have <00:41:28.842>to <00:41:28.998>be <00:41:29.153>compatible <00:41:29.309>with <00:41:29.465>m

855
00:41:31.785 --> 00:41:34.085
<00:41:31.785>or <00:41:32.018>at <00:41:32.251>least <00:41:32.484>don't <00:41:32.718>do <00:41:32.951>any <00:41:33.185>dirty

856
00:41:34.175 --> 00:41:35.725
<00:41:34.175>reflection <00:41:34.454>matching <00:41:34.733>and <00:41:35.012>stuff <00:41:35.291>like <00:41:35.569>that.

857
00:41:36.025 --> 00:41:38.965
<00:41:36.025>And <00:41:36.141>then <00:41:36.258>maybe <00:41:36.375>it <00:41:36.491>works <00:41:36.608>or <00:41:36.725>just <00:41:36.841>you <00:41:36.958>have <00:41:37.075>to <00:41:37.191>try <00:41:37.308>it <00:41:37.425>out.

858
00:41:39.305 --> 00:41:42.005
<00:41:39.305>For <00:41:39.444>example, <00:41:39.585>I <00:41:39.725>went <00:41:39.865>into <00:41:40.004>a <00:41:40.145>trouble <00:41:40.285>with <00:41:40.424>the <00:41:40.565>caffeine <00:41:40.705>cache

859
00:41:42.055 --> 00:41:44.565
<00:41:42.055>where <00:41:42.335>the <00:41:42.615>reflection <00:41:42.895>stuff <00:41:43.174>isn't <00:41:43.455>working.

860
00:41:45.045 --> 00:41:46.245
<00:41:45.045>I <00:41:45.315>created <00:41:45.585>a <00:41:45.855>GitHub <00:41:46.125>issue

861
00:41:46.245 --> 00:41:50.525
<00:41:46.245>and <00:41:46.361>also <00:41:46.478>put <00:41:46.595>in <00:41:46.711>a <00:41:46.828>workaround <00:41:46.944>there, <00:41:47.061>so <00:41:47.178>I <00:41:47.295>got <00:41:47.411>it <00:41:47.528>compiled <00:41:47.645>in

862
00:41:51.185 --> 00:41:53.445
<00:41:51.185>the <00:41:51.312>long <00:41:51.439>run, <00:41:51.566>but <00:41:51.694>it <00:41:51.821>was <00:41:51.948>a <00:41:52.075>little <00:41:52.203>bit <00:41:52.330>of <00:41:52.457>a <00:41:52.585>hassle

863
00:41:53.665 --> 00:41:55.125
<00:41:53.665>to <00:41:53.927>get <00:41:54.190>this <00:41:54.453>native <00:41:54.716>image <00:41:54.979>started.

864
00:41:55.665 --> 00:41:58.405
<00:41:55.665>But <00:41:55.898>if <00:41:56.131>it's <00:41:56.365>working, <00:41:56.598>it <00:41:56.831>is <00:41:57.065>really,

865
00:41:58.405 --> 00:41:59.925
<00:41:58.405>really <00:41:58.747>great <00:41:59.089>piece <00:41:59.431>of <00:41:59.773>technology.

866
00:41:59.985 --> 00:42:02.005
<00:41:59.985>The <00:42:00.185>run <00:42:00.385>VM <00:42:00.585>native <00:42:00.785>image, <00:42:00.985>it's <00:42:01.185>really <00:42:01.385>good.

867
00:42:04.105 --> 00:42:06.005
<00:42:04.105>If <00:42:04.305>you <00:42:04.505>are <00:42:04.705>now <00:42:04.905>interested <00:42:05.105>in <00:42:05.305>more <00:42:05.505>stuff,

868
00:42:06.005 --> 00:42:08.365
<00:42:06.005>you <00:42:06.160>can <00:42:06.316>take <00:42:06.471>a <00:42:06.627>look <00:42:06.782>at <00:42:06.938>our <00:42:07.093>GitHub <00:42:07.249>repo <00:42:07.405>in,

869
00:42:08.435 --> 00:42:10.245
<00:42:08.435>take <00:42:08.668>a <00:42:08.901>look <00:42:09.134>at <00:42:09.368>the <00:42:09.601>micron <00:42:09.835>documentation

870
00:42:10.345 --> 00:42:12.645
<00:42:10.345>or <00:42:10.520>take <00:42:10.694>a <00:42:10.870>look <00:42:11.044>at <00:42:11.220>the <00:42:11.395>m <00:42:11.569>the <00:42:11.745>m

871
00:42:12.645 --> 00:42:13.925
<00:42:12.645>really <00:42:12.933>cool <00:42:13.221>piece <00:42:13.509>of <00:42:13.797>technology.

872
00:42:13.945 --> 00:42:15.485
<00:42:13.945>You <00:42:14.143>should <00:42:14.341>at <00:42:14.539>least <00:42:14.737>give <00:42:14.935>it <00:42:15.133>a <00:42:15.331>try.

873
00:42:17.035 --> 00:42:19.245
<00:42:17.035>Okay, <00:42:17.268>and <00:42:17.501>now <00:42:17.734>I'm <00:42:17.968>open <00:42:18.201>for <00:42:18.435>questions.

874
00:42:22.135 --> 00:42:23.725
<00:42:22.135>Hello <00:42:22.415>Moritz. <00:42:22.695>Thank <00:42:22.975>you <00:42:23.255>very <00:42:23.535>much.

875
00:42:23.995 --> 00:42:28.685
<00:42:23.995>Very <00:42:24.134>interesting <00:42:24.275>and <00:42:24.415>down <00:42:24.555>to <00:42:24.694>the <00:42:24.835>point. <00:42:24.975>So <00:42:25.115>thanks <00:42:25.255>for <00:42:25.395>that.

876
00:42:29.145 --> 00:42:32.885
<00:42:29.145>Uh, <00:42:29.285>we <00:42:29.425>do <00:42:29.565>have <00:42:29.705>questions, <00:42:29.845>so <00:42:29.985>let <00:42:30.125>me <00:42:30.265>scroll <00:42:30.405>through <00:42:30.545>them.

877
00:42:34.105 --> 00:42:36.685
<00:42:34.105>Um <00:42:34.338>hmm. <00:42:34.571>Let's <00:42:34.805>start <00:42:35.038>with <00:42:35.271>that <00:42:35.505>one.

878
00:42:37.065 --> 00:42:42.005
<00:42:37.065>So, <00:42:37.345>um, <00:42:37.625>is <00:42:37.905>micro <00:42:38.185>node <00:42:38.465>compatible

879
00:42:42.155 --> 00:42:43.845
<00:42:42.155>with <00:42:42.855>open <00:42:43.555>GDK?

880
00:42:45.385 --> 00:42:50.005
<00:42:45.385>Yes, <00:42:45.525>you <00:42:45.665>can <00:42:45.805>just <00:42:45.945>run, <00:42:46.085>um, <00:42:46.225>micro <00:42:46.365>node <00:42:46.505>on <00:42:46.645>any <00:42:46.785>JVM,

881
00:42:50.015 --> 00:42:52.405
<00:42:50.015>which <00:42:50.365>passes <00:42:50.714>the <00:42:51.065>JVM <00:42:51.415>um,

882
00:42:53.275 --> 00:42:54.275
<00:42:53.275>Test. <00:42:53.725>Okay. <00:42:54.175>You

883
00:42:54.275 --> 00:42:55.685
<00:42:54.275>can <00:42:54.486>run <00:42:54.698>it <00:42:54.909>on <00:42:55.121>every <00:42:55.332>J <00:42:55.544>vm.

884
00:42:57.235 --> 00:43:01.245
<00:42:57.235>Okay. <00:42:57.468>And <00:42:57.701>then, <00:42:57.935>um, <00:42:58.168>Conrad <00:42:58.401>is <00:42:58.635>asking,

885
00:43:01.355 --> 00:43:04.605
<00:43:01.355>does <00:43:01.555>micro <00:43:01.755>node <00:43:01.955>support <00:43:02.155>spring <00:43:02.355>a <00:43:02.555>OP <00:43:02.755>implementation?

886
00:43:06.025 --> 00:43:08.485
<00:43:06.025>Um, <00:43:06.225>I'm <00:43:06.425>not <00:43:06.625>sure <00:43:06.825>micro <00:43:07.025>node <00:43:07.225>has <00:43:07.425>some

887
00:43:09.385 --> 00:43:10.645
<00:43:09.385>spring <00:43:10.519>interoperability,

888
00:43:10.865 --> 00:43:13.205
<00:43:10.865>but <00:43:11.020>I'm <00:43:11.176>not <00:43:11.331>sure <00:43:11.487>if <00:43:11.642>the <00:43:11.798>spring <00:43:11.953>a <00:43:12.109>OP <00:43:12.265>stuff

889
00:43:13.225 --> 00:43:14.445
<00:43:13.225>is <00:43:13.499>working <00:43:13.774>in <00:43:14.048>micro <00:43:14.323>node.

890
00:43:14.975 --> 00:43:16.685
<00:43:14.975>Could <00:43:15.208>be. <00:43:15.441>I <00:43:15.674>have <00:43:15.908>not <00:43:16.141>tested <00:43:16.375>it.

891
00:43:17.795 --> 00:43:21.685
<00:43:17.795>Okay. <00:43:18.075>And <00:43:18.355>the <00:43:18.635>next <00:43:18.915>one, <00:43:19.195>uh,

892
00:43:22.025 --> 00:43:24.965
<00:43:22.025>Bo <00:43:22.180>is <00:43:22.336>asking <00:43:22.491>are <00:43:22.647>there <00:43:22.802>any <00:43:22.958>use <00:43:23.113>cases <00:43:23.269>when <00:43:23.425>not

893
00:43:25.125 --> 00:43:26.325
<00:43:25.125>to <00:43:25.485>use <00:43:25.845>micro <00:43:26.205>node?

894
00:43:26.405 --> 00:43:28.645
<00:43:26.405>I <00:43:26.560>mean, <00:43:26.716>you've <00:43:26.871>pointed <00:43:27.027>out <00:43:27.182>some <00:43:27.338>on <00:43:27.493>the <00:43:27.649>last <00:43:27.805>slides,

895
00:43:28.705 --> 00:43:31.925
<00:43:28.705>but <00:43:28.938>maybe <00:43:29.171>some <00:43:29.404>general <00:43:29.638>things <00:43:29.871>like <00:43:30.105>use

896
00:43:31.925 --> 00:43:33.365
<00:43:31.925>cases <00:43:32.249>where <00:43:32.573>you <00:43:32.897>would <00:43:33.221>say,

897
00:43:34.185 --> 00:43:37.045
<00:43:34.185>Um, <00:43:34.418>so <00:43:34.651>micro <00:43:34.884>node, <00:43:35.118>um, <00:43:35.351>uses, <00:43:35.585>um,

898
00:43:37.205 --> 00:43:40.405
<00:43:37.205>reactive <00:43:37.438>programming <00:43:37.671>model <00:43:37.904>inside <00:43:38.138>their <00:43:38.371>own <00:43:38.605>classes.

899
00:43:40.905 --> 00:43:43.045
<00:43:40.905>So <00:43:41.105>if <00:43:41.305>you <00:43:41.505>have <00:43:41.705>to <00:43:41.905>extend <00:43:42.105>micro <00:43:42.305>node

900
00:43:43.045 --> 00:43:45.125
<00:43:43.045>and <00:43:43.278>you <00:43:43.511>hate <00:43:43.745>the <00:43:43.978>reactive <00:43:44.211>programming <00:43:44.445>model,

901
00:43:45.355 --> 00:43:49.445
<00:43:45.355>stay <00:43:45.482>away <00:43:45.609>from <00:43:45.736>micro <00:43:45.864>node <00:43:45.991>because <00:43:46.118>then <00:43:46.245>you <00:43:46.373>have <00:43:46.500>to <00:43:46.627>use <00:43:46.755>this.

902
00:43:50.105 --> 00:43:51.565
<00:43:50.105>Um, <00:43:50.433>the, <00:43:50.762>the <00:43:51.090>reactive <00:43:51.419>model,

903
00:43:51.785 --> 00:43:54.085
<00:43:51.785>if <00:43:51.960>you're <00:43:52.134>just <00:43:52.310>writing <00:43:52.484>stuff <00:43:52.660>in <00:43:52.835>your <00:43:53.009>own <00:43:53.185>controllers,

904
00:43:54.085 --> 00:43:56.805
<00:43:54.085>you <00:43:54.225>don't <00:43:54.365>have <00:43:54.505>to <00:43:54.645>to <00:43:54.785>use <00:43:54.925>it <00:43:55.065>annotated <00:43:55.205>with <00:43:55.345>a <00:43:55.485>blocking

905
00:43:56.825 --> 00:43:58.365
<00:43:56.825>or <00:43:57.171>how <00:43:57.518>this <00:43:57.864>annotation <00:43:58.211>called

906
00:43:58.545 --> 00:44:01.125
<00:43:58.545>and <00:43:58.745>all <00:43:58.945>the <00:43:59.145>stuff <00:43:59.345>is <00:43:59.545>working <00:43:59.745>like <00:43:59.945>in

907
00:44:01.125 --> 00:44:02.205
<00:44:01.125>non-reactive <00:44:02.096>applications.

908
00:44:02.205 --> 00:44:04.485
<00:44:02.205>But <00:44:02.332>if <00:44:02.459>you <00:44:02.586>have <00:44:02.714>to <00:44:02.841>go <00:44:02.968>into <00:44:03.095>the <00:44:03.223>core <00:44:03.350>of <00:44:03.477>micro <00:44:03.605>node

909
00:44:04.585 --> 00:44:08.605
<00:44:04.585>and <00:44:04.725>for <00:44:04.865>ex <00:44:05.005>for <00:44:05.145>extension, <00:44:05.285>uh, <00:44:05.425>for <00:44:05.565>example <00:44:05.705>build <00:44:05.845>an <00:44:05.985>OO

910
00:44:08.625 --> 00:44:12.285
<00:44:08.625>to <00:44:08.780>token <00:44:08.936>refresh, <00:44:09.091>you <00:44:09.247>have <00:44:09.402>to, <00:44:09.558>uh, <00:44:09.713>use <00:44:09.869>reactive <00:44:10.025>programming.

911
00:44:12.285 --> 00:44:14.085
<00:44:12.285>And <00:44:12.440>if <00:44:12.596>you <00:44:12.751>don't <00:44:12.907>like <00:44:13.062>that, <00:44:13.218>stay <00:44:13.373>away <00:44:13.529>from <00:44:13.685>Macron.

912
00:44:15.635 --> 00:44:17.045
<00:44:15.635>Okay, <00:44:15.952>fair <00:44:16.269>enough. <00:44:16.586>Then, <00:44:16.904>uh,

913
00:44:17.045 --> 00:44:19.845
<00:44:17.045>Martin <00:44:17.245>Jacob <00:44:17.445>is <00:44:17.645>asking <00:44:17.845>can <00:44:18.045>micro <00:44:18.245>node <00:44:18.445>generate

914
00:44:20.165 --> 00:44:21.925
<00:44:20.165>WSDL, <00:44:20.631>like <00:44:21.098>spring <00:44:21.565>do

915
00:44:23.845 --> 00:44:27.085
<00:44:23.845>I <00:44:24.044>have <00:44:24.245>not <00:44:24.444>worked <00:44:24.645>with <00:44:24.845>XML <00:44:25.044>based <00:44:25.245>services?

916
00:44:27.865 --> 00:44:31.845
<00:44:27.865>So <00:44:28.020>I <00:44:28.176>have <00:44:28.331>no <00:44:28.487>expertise <00:44:28.642>if, <00:44:28.798>if <00:44:28.953>this <00:44:29.109>can <00:44:29.265>generate,

917
00:44:32.105 --> 00:44:33.325
<00:44:32.105>uh, <00:44:33.203>WSDL.

918
00:44:34.995 --> 00:44:38.205
<00:44:34.995>Okay. <00:44:35.694>Um, <00:44:36.395>someone

919
00:44:38.355 --> 00:44:41.205
<00:44:38.355>with <00:44:38.530>the <00:44:38.705>name <00:44:38.880>GI <00:44:39.055>Master <00:44:39.230>is, <00:44:39.405>is <00:44:39.580>asking, <00:44:39.755>uh,

920
00:44:41.225 --> 00:44:44.325
<00:44:41.225>how <00:44:41.458>is <00:44:41.691>micro <00:44:41.924>not <00:44:42.158>different <00:44:42.391>to, <00:44:42.625>uh,

921
00:44:44.325 --> 00:44:45.925
<00:44:44.325>performance <00:44:44.674>memory <00:44:45.024>and <00:44:45.375>so <00:44:45.725>on.

922
00:44:46.705 --> 00:44:49.005
<00:44:46.705>Mm-hmm. <00:44:46.985>Uh, <00:44:47.265>that's <00:44:47.545>a <00:44:47.825>great <00:44:48.105>question.

923
00:44:49.395 --> 00:44:51.965
<00:44:49.395>They, <00:44:49.628>um, <00:44:49.861>essentially <00:44:50.095>occupy <00:44:50.328>the <00:44:50.561>same <00:44:50.795>space.

924
00:44:51.995 --> 00:44:55.805
<00:44:51.995>They <00:44:52.194>are <00:44:52.395>both, <00:44:52.595>um, <00:44:52.795>um, <00:44:52.995>spring <00:44:53.194>Boot <00:44:53.395>competitor

925
00:44:56.105 --> 00:44:59.125
<00:44:56.105>and <00:44:56.385>are <00:44:56.665>marketed <00:44:56.945>toward <00:44:57.225>fast <00:44:57.505>startup.

926
00:44:59.265 --> 00:45:02.725
<00:44:59.265>And <00:44:59.420>uh, <00:44:59.576>Cocos <00:44:59.731>also <00:44:59.887>had <00:45:00.042>the <00:45:00.198>Grow <00:45:00.353>native <00:45:00.509>VM <00:45:00.665>image.

927
00:45:02.895 --> 00:45:04.725
<00:45:02.895>Sorry, <00:45:03.245>they <00:45:03.595>are <00:45:03.945>not <00:45:04.295>related.

928
00:45:05.035 --> 00:45:06.245
<00:45:05.035>They <00:45:05.397>are <00:45:05.761>the, <00:45:06.124>the,

929
00:45:06.265 --> 00:45:09.285
<00:45:06.265>the <00:45:06.464>same <00:45:06.665>product <00:45:06.865>from <00:45:07.065>two <00:45:07.265>different <00:45:07.464>vendors <00:45:07.665>essentially.

930
00:45:09.665 --> 00:45:13.005
<00:45:09.665>So <00:45:09.792>I <00:45:09.919>guess <00:45:10.046>you <00:45:10.174>would <00:45:10.301>use <00:45:10.428>Farcas <00:45:10.555>if <00:45:10.683>you <00:45:10.810>like <00:45:10.937>Java <00:45:11.065>EE

931
00:45:13.385 --> 00:45:16.525
<00:45:13.385>and <00:45:13.540>you <00:45:13.696>use <00:45:13.851>micro <00:45:14.007>node <00:45:14.162>if <00:45:14.318>you <00:45:14.473>don't <00:45:14.629>like <00:45:14.785>Java.

932
00:45:20.075 --> 00:45:21.485
<00:45:20.075>Okay. <00:45:21.344>Um,

933
00:45:21.615 --> 00:45:23.485
<00:45:21.615>Clara <00:45:21.848>is <00:45:22.081>asking <00:45:22.314>if <00:45:22.548>you <00:45:22.781>provide <00:45:23.015>hands-on

934
00:45:23.765 --> 00:45:24.885
<00:45:23.765>workshops <00:45:24.101>on <00:45:24.437>micro <00:45:24.773>node?

935
00:45:26.915 --> 00:45:28.405
<00:45:26.915>Yeah, <00:45:27.362>just <00:45:27.809>contact <00:45:28.256>me

936
00:45:28.425 --> 00:45:30.685
<00:45:28.425>and <00:45:28.600>we, <00:45:28.775>I <00:45:28.950>guess <00:45:29.125>we <00:45:29.300>can <00:45:29.475>work <00:45:29.650>something <00:45:29.825>out.

937
00:45:31.505 --> 00:45:33.805
<00:45:31.505>My <00:45:31.705>email <00:45:31.905>address <00:45:32.105>is <00:45:32.305>on <00:45:32.505>this <00:45:32.705>slide <00:45:32.905>here.

938
00:45:35.345 --> 00:45:38.125
<00:45:35.345>Uh, <00:45:35.520>so <00:45:35.694>let's <00:45:35.870>put <00:45:36.044>up <00:45:36.220>the <00:45:36.395>slides <00:45:36.569>maybe <00:45:36.745>again

939
00:45:38.595 --> 00:45:39.725
<00:45:38.595>just <00:45:38.933>asking <00:45:39.272>next <00:45:39.612>stage.

940
00:45:40.195 --> 00:45:43.085
<00:45:40.195>It's, <00:45:40.395>it's <00:45:40.595>my <00:45:40.795>name, <00:45:40.995>Moritz <00:45:41.195>camera <00:45:41.395>at <00:45:41.595>Kudi.

941
00:45:44.115 --> 00:45:45.205
<00:45:44.115>Okay. <00:45:44.605>And <00:45:45.096>Yvan

942
00:45:45.265 --> 00:45:49.125
<00:45:45.265>who <00:45:45.392>has <00:45:45.519>been <00:45:45.646>engaged <00:45:45.774>the <00:45:45.901>whole <00:45:46.028>day <00:45:46.155>is <00:45:46.283>asking, <00:45:46.410>uh, <00:45:46.537>less <00:45:46.665>memo,

943
00:45:49.315 --> 00:45:52.805
<00:45:49.315>less <00:45:49.515>memory <00:45:49.715>is <00:45:49.915>out <00:45:50.115>of <00:45:50.315>the <00:45:50.515>box <00:45:50.715>compared

944
00:45:52.825 --> 00:45:54.845
<00:45:52.825>to <00:45:53.174>string <00:45:53.524>native <00:45:53.875>only <00:45:54.225>tweaks

945
00:45:54.845 --> 00:45:57.765
<00:45:54.845>or <00:45:54.984>you <00:45:55.125>extend, <00:45:55.265>I'm <00:45:55.404>not <00:45:55.544>sure <00:45:55.685>if <00:45:55.825>I <00:45:55.964>get <00:45:56.105>the <00:45:56.245>question,

946
00:45:57.945 --> 00:46:01.165
<00:45:57.945>but <00:45:58.072>maybe <00:45:58.199>it <00:45:58.326>was, <00:45:58.454>uh, <00:45:58.581>about <00:45:58.708>the <00:45:58.835>benchmarks <00:45:58.963>if <00:45:59.090>it <00:45:59.217>is <00:45:59.345>out

947
00:46:01.165 --> 00:46:03.005
<00:46:01.165>of <00:46:01.305>the <00:46:01.445>box <00:46:01.585>or <00:46:01.725>if <00:46:01.865>you <00:46:02.005>have <00:46:02.145>to <00:46:02.285>tweak <00:46:02.425>it <00:46:02.565>first.

948
00:46:05.225 --> 00:46:09.285
<00:46:05.225>Um, <00:46:05.505>so <00:46:05.785>this, <00:46:06.065>this <00:46:06.345>thing <00:46:06.625>here,

949
00:46:10.385 --> 00:46:15.205
<00:46:10.385>um, <00:46:10.512>I <00:46:10.639>I <00:46:10.766>set <00:46:10.894>the <00:46:11.021>max, <00:46:11.148>um, <00:46:11.275>the <00:46:11.403>max <00:46:11.530>heap, <00:46:11.657>uh, <00:46:11.785>memory,

950
00:46:15.465 --> 00:46:18.325
<00:46:15.465>but <00:46:15.640>I, <00:46:15.815>I <00:46:15.990>didn't <00:46:16.165>tweak <00:46:16.340>the <00:46:16.515>application <00:46:16.690>somehow <00:46:16.865>here,

951
00:46:18.785 --> 00:46:20.685
<00:46:18.785>if <00:46:18.960>you <00:46:19.134>take <00:46:19.310>a <00:46:19.484>look <00:46:19.660>at <00:46:19.835>the <00:46:20.009>native <00:46:20.185>image

952
00:46:20.685 --> 00:46:23.085
<00:46:20.685>and <00:46:20.860>I <00:46:21.035>run <00:46:21.210>it, <00:46:21.384>I <00:46:21.560>didn't <00:46:21.735>tweak <00:46:21.910>that <00:46:22.085>I,

953
00:46:23.165 --> 00:46:25.885
<00:46:23.165>I <00:46:23.365>I <00:46:23.565>didn't <00:46:23.765>set <00:46:23.965>any <00:46:24.165>mixed <00:46:24.365>memories <00:46:24.565>or,

954
00:46:25.945 --> 00:46:27.925
<00:46:25.945>and <00:46:26.225>I <00:46:26.505>didn't <00:46:26.785>deploy <00:46:27.065>any <00:46:27.345>tweaks.

955
00:46:28.545 --> 00:46:30.645
<00:46:28.545>So <00:46:28.720>this <00:46:28.895>is <00:46:29.070>out <00:46:29.245>of <00:46:29.420>the <00:46:29.595>box <00:46:29.770>memory <00:46:29.945>usage.

956
00:46:32.045 --> 00:46:34.085
<00:46:32.045>I, <00:46:32.220>I'm <00:46:32.395>not <00:46:32.570>sure <00:46:32.745>if <00:46:32.920>this <00:46:33.095>answers <00:46:33.270>the <00:46:33.445>question.

957
00:46:35.435 --> 00:46:37.205
<00:46:35.435>Okay. <00:46:35.668>So <00:46:35.901>Yvonne, <00:46:36.134>if, <00:46:36.368>if <00:46:36.601>it's, <00:46:36.835>uh,

958
00:46:37.825 --> 00:46:39.085
<00:46:37.825>not <00:46:38.108>the <00:46:38.392>answer <00:46:38.675>you <00:46:38.959>expected

959
00:46:39.185 --> 00:46:43.365
<00:46:39.185>and <00:46:39.340>just, <00:46:39.496>uh, <00:46:39.651>tell <00:46:39.807>us <00:46:39.962>again, <00:46:40.118>um, <00:46:40.273>then <00:46:40.429>another <00:46:40.585>question,

960
00:46:43.485 --> 00:46:44.605
<00:46:43.485>I <00:46:43.686>think <00:46:43.888>it's <00:46:44.089>the <00:46:44.291>last <00:46:44.493>one.

961
00:46:44.745 --> 00:46:47.685
<00:46:44.745>Uh, <00:46:44.872>how <00:46:44.999>big <00:46:45.126>is <00:46:45.254>the <00:46:45.381>adoption <00:46:45.508>of <00:46:45.635>Micro <00:46:45.763>not <00:46:45.890>on <00:46:46.017>the <00:46:46.145>market?

962
00:46:47.825 --> 00:46:49.005
<00:46:47.825>Is <00:46:48.179>it <00:46:48.533>future <00:46:48.887>proof?

963
00:46:50.945 --> 00:46:53.885
<00:46:50.945>Um, <00:46:51.225>so <00:46:51.505>It's <00:46:51.785>quite <00:46:52.065>new, <00:46:52.345>right?

964
00:46:55.195 --> 00:46:58.285
<00:46:55.195>Yeah, <00:46:55.335>it's, <00:46:55.475>it's <00:46:55.615>not <00:46:55.755>that <00:46:55.895>new, <00:46:56.035>but <00:46:56.175>it's <00:46:56.315>compared <00:46:56.455>to <00:46:56.595>Spring

965
00:46:58.285 --> 00:47:00.445
<00:46:58.285>and <00:46:58.565>Java, <00:46:58.845>it's <00:46:59.125>really, <00:46:59.404>really <00:46:59.685>new.

966
00:47:01.105 --> 00:47:04.885
<00:47:01.105>Um, <00:47:01.305>that's, <00:47:01.505>I <00:47:01.705>think <00:47:01.905>that's <00:47:02.105>the <00:47:02.305>biggest <00:47:02.505>problem

967
00:47:04.955 --> 00:47:06.325
<00:47:04.955>with <00:47:05.263>all <00:47:05.571>the <00:47:05.879>Spring <00:47:06.187>Boot

968
00:47:06.325 --> 00:47:08.965
<00:47:06.325>and <00:47:06.500>Java <00:47:06.674>e <00:47:06.850>containers <00:47:07.024>that <00:47:07.200>they <00:47:07.375>are <00:47:07.549>relatively <00:47:07.725>new

969
00:47:09.025 --> 00:47:12.125
<00:47:09.025>and <00:47:09.180>you <00:47:09.336>have <00:47:09.491>to, <00:47:09.647>you <00:47:09.802>have <00:47:09.958>to <00:47:10.113>believe <00:47:10.269>the <00:47:10.425>vendors

970
00:47:12.235 --> 00:47:13.605
<00:47:12.235>that <00:47:12.543>this <00:47:12.851>stuff <00:47:13.159>is <00:47:13.468>supported

971
00:47:13.605 --> 00:47:16.205
<00:47:13.605>and <00:47:13.760>is <00:47:13.916>the <00:47:14.071>next <00:47:14.227>big <00:47:14.382>thing <00:47:14.538>in <00:47:14.693>Java <00:47:14.849>service <00:47:15.005>space.

972
00:47:16.305 --> 00:47:20.205
<00:47:16.305>So <00:47:16.421>it's, <00:47:16.538>it's <00:47:16.654>hard <00:47:16.771>to <00:47:16.888>say <00:47:17.004>we <00:47:17.121>did <00:47:17.238>a <00:47:17.355>project <00:47:17.471>with <00:47:17.588>micro <00:47:17.705>node

973
00:47:20.345 --> 00:47:23.685
<00:47:20.345>and <00:47:20.544>our <00:47:20.745>project <00:47:20.944>was <00:47:21.145>successful <00:47:21.345>and <00:47:21.544>it <00:47:21.745>worked

974
00:47:23.685 --> 00:47:25.365
<00:47:23.685>because <00:47:24.035>the <00:47:24.384>documentation <00:47:24.735>was <00:47:25.085>great,

975
00:47:25.745 --> 00:47:29.645
<00:47:25.745>but <00:47:25.944>of <00:47:26.145>course <00:47:26.345>it <00:47:26.545>doesn't <00:47:26.745>have <00:47:26.944>the <00:47:27.145>same

976
00:47:29.775 --> 00:47:30.925
<00:47:29.775>reach <00:47:30.120>as <00:47:30.465>Spring <00:47:30.810>Boot.

977
00:47:31.105 --> 00:47:33.525
<00:47:31.105>So <00:47:31.280>I <00:47:31.455>think <00:47:31.630>every <00:47:31.805>problem <00:47:31.980>you <00:47:32.155>will <00:47:32.330>run <00:47:32.505>to

978
00:47:33.525 --> 00:47:35.445
<00:47:33.525>with <00:47:33.805>Spring <00:47:34.085>Boot <00:47:34.365>is <00:47:34.645>solved <00:47:34.925>somewhere

979
00:47:36.065 --> 00:47:38.405
<00:47:36.065>in <00:47:36.265>Stack <00:47:36.465>Overflow <00:47:36.665>you <00:47:36.865>find <00:47:37.065>a <00:47:37.265>block <00:47:37.465>post

980
00:47:39.065 --> 00:47:42.165
<00:47:39.065>you <00:47:39.205>could <00:47:39.345>run <00:47:39.485>into <00:47:39.625>problems <00:47:39.765>with <00:47:39.905>micro <00:47:40.045>node <00:47:40.185>where <00:47:40.325>you <00:47:40.465>have

981
00:47:42.165 --> 00:47:43.525
<00:47:42.165>to <00:47:42.471>find <00:47:42.777>the <00:47:43.083>solution <00:47:43.389>yourself

982
00:47:43.545 --> 00:47:45.885
<00:47:43.545>and <00:47:43.778>didn't <00:47:44.011>find <00:47:44.245>it <00:47:44.478>on <00:47:44.711>Stack <00:47:44.945>Overflow,

983
00:47:46.385 --> 00:47:47.445
<00:47:46.385>that's <00:47:46.703>always <00:47:47.021>a <00:47:47.339>problem.

984
00:47:48.185 --> 00:47:50.965
<00:47:48.185>But <00:47:48.418>we, <00:47:48.651>we, <00:47:48.884>we <00:47:49.118>hadn't <00:47:49.351>big <00:47:49.585>problems

985
00:47:50.965 --> 00:47:52.285
<00:47:50.965>with <00:47:51.262>Micron, <00:47:51.559>so <00:47:51.856>everything <00:47:52.153>works.

986
00:47:53.395 --> 00:47:55.805
<00:47:53.395>Okay. <00:47:53.550>Thank <00:47:53.706>you <00:47:53.861>MOIs <00:47:54.017>for <00:47:54.172>answering <00:47:54.328>all <00:47:54.483>of <00:47:54.639>these <00:47:54.795>questions.

987
00:47:56.025 --> 00:47:58.205
<00:47:56.025>Um, <00:47:56.225>is <00:47:56.425>there <00:47:56.625>anything <00:47:56.825>else <00:47:57.025>you <00:47:57.225>would <00:47:57.425>like

988
00:47:58.205 --> 00:47:59.365
<00:47:58.205>to <00:47:58.466>share <00:47:58.727>with <00:47:58.988>the <00:47:59.249>community?

989
00:47:59.545 --> 00:48:01.765
<00:47:59.545>Um, <00:47:59.745>I'm <00:47:59.945>maybe <00:48:00.145>looking <00:48:00.345>for, <00:48:00.545>for <00:48:00.745>new <00:48:00.945>colleagues

990
00:48:01.785 --> 00:48:03.125
<00:48:01.785>for <00:48:02.086>reinforcement <00:48:02.388>and <00:48:02.689>your <00:48:02.991>team?

991
00:48:03.875 --> 00:48:06.965
<00:48:03.875>Yeah, <00:48:04.075>um, <00:48:04.275>we <00:48:04.475>are <00:48:04.675>always <00:48:04.875>looking <00:48:05.075>for, <00:48:05.275>um,

992
00:48:06.965 --> 00:48:08.685
<00:48:06.965>highly <00:48:07.431>motivated <00:48:07.898>software <00:48:08.365>engineers

993
00:48:08.685 --> 00:48:10.805
<00:48:08.685>or <00:48:09.035>architects <00:48:09.384>checkout <00:48:09.735>our <00:48:10.085>website.

994
00:48:11.035 --> 00:48:13.845
<00:48:11.035>It's, <00:48:11.501>uh, <00:48:11.968>de <00:48:12.435>and

995
00:48:14.475 --> 00:48:15.685
<00:48:14.475>Okay, <00:48:14.837>take <00:48:15.201>a <00:48:15.564>look.

996
00:48:15.785 --> 00:48:19.085
<00:48:15.785>So <00:48:15.912>you <00:48:16.039>heard <00:48:16.166>it <00:48:16.294>and <00:48:16.421>uh, <00:48:16.548>Ivan <00:48:16.675>just <00:48:16.803>let <00:48:16.930>us <00:48:17.057>say <00:48:17.185>no,

997
00:48:19.085 --> 00:48:22.285
<00:48:19.085>he <00:48:19.212>was <00:48:19.339>not <00:48:19.466>asking <00:48:19.594>if <00:48:19.721>you <00:48:19.848>cheated, <00:48:19.975>he <00:48:20.103>was, <00:48:20.230>uh, <00:48:20.357>asking <00:48:20.485>like

998
00:48:22.285 --> 00:48:24.365
<00:48:22.285>how <00:48:22.565>do <00:48:22.845>you <00:48:23.125>decrease <00:48:23.404>memory <00:48:23.685>usage?

999
00:48:24.835 --> 00:48:27.365
<00:48:24.835>That <00:48:25.068>was <00:48:25.301>the <00:48:25.535>question <00:48:25.768>that <00:48:26.001>you <00:48:26.235>meant.

1000
00:48:28.545 --> 00:48:31.085
<00:48:28.545>Um, <00:48:28.895>you <00:48:29.245>you <00:48:29.595>mean <00:48:29.945>in,

1001
00:48:36.005 --> 00:48:37.405
<00:48:36.005>I <00:48:36.162>I'm <00:48:36.320>not <00:48:36.477>sure <00:48:36.635>if <00:48:36.792>I <00:48:36.950>get <00:48:37.107>the <00:48:37.265>question.

1002
00:48:37.405 --> 00:48:39.085
<00:48:37.405>Maybe <00:48:37.638>you, <00:48:37.871>you <00:48:38.105>mean <00:48:38.338>this <00:48:38.571>drop <00:48:38.805>here?

1003
00:48:39.565 --> 00:48:41.965
<00:48:39.565>I, <00:48:39.720>I <00:48:39.876>collect, <00:48:40.031>I, <00:48:40.187>I <00:48:40.342>did <00:48:40.498>a, <00:48:40.653>um, <00:48:40.809>garbage <00:48:40.965>collection,

1004
00:48:42.705 --> 00:48:46.125
<00:48:42.705>but <00:48:42.845>if <00:48:42.985>we <00:48:43.125>are <00:48:43.265>taking <00:48:43.404>on, <00:48:43.545>uh, <00:48:43.685>talking <00:48:43.825>about <00:48:43.965>how <00:48:44.105>to

1005
00:48:46.635 --> 00:48:50.405
<00:48:46.635>generally <00:48:46.790>reduce <00:48:46.946>memory <00:48:47.101>usage, <00:48:47.257>this <00:48:47.412>is <00:48:47.568>a <00:48:47.723>quite <00:48:47.879>wide <00:48:48.035>field

1006
00:48:50.405 --> 00:48:53.565
<00:48:50.405>and <00:48:50.638>I <00:48:50.871>can't <00:48:51.105>give <00:48:51.338>any, <00:48:51.571>um, <00:48:51.805>yeah,

1007
00:48:53.585 --> 00:48:55.485
<00:48:53.585>It <00:48:53.785>could <00:48:53.985>be, <00:48:54.185>we <00:48:54.385>can <00:48:54.585>do <00:48:54.785>this <00:48:54.985>in

1008
00:48:55.485 --> 00:48:56.565
<00:48:55.485>another, <00:48:55.728>in <00:48:55.971>the <00:48:56.214>next <00:48:56.457>session.

1009
00:48:56.565 --> 00:49:00.605
<00:48:56.565>Yeah. <00:48:56.740>Okay. <00:48:56.915>Then <00:48:57.090>Maurice, <00:48:57.265>uh, <00:48:57.440>thank <00:48:57.615>you <00:48:57.790>so <00:48:57.965>much.

1010
00:49:01.185 --> 00:49:04.085
<00:49:01.185>Um, <00:49:01.312>I <00:49:01.439>hope <00:49:01.566>you <00:49:01.694>enjoyed <00:49:01.821>it <00:49:01.948>as <00:49:02.075>well <00:49:02.203>as <00:49:02.330>the <00:49:02.457>audience <00:49:02.585>did.

1011
00:49:04.425 --> 00:49:06.605
<00:49:04.425>So, <00:49:04.625>uh, <00:49:04.825>hope <00:49:05.025>to <00:49:05.225>see <00:49:05.425>you <00:49:05.625>soon <00:49:05.825>again,

1012
00:49:06.605 --> 00:49:08.165
<00:49:06.605>maybe <00:49:06.885>also <00:49:07.165>at <00:49:07.445>a <00:49:07.725>physical <00:49:08.005>event.

1013
00:49:08.465 --> 00:49:10.765
<00:49:08.465>Um, <00:49:08.698>and, <00:49:08.931>uh, <00:49:09.165>have <00:49:09.398>a <00:49:09.631>nice <00:49:09.865>evening

1014
00:49:11.265 --> 00:49:14.445
<00:49:11.265>and <00:49:11.420>for <00:49:11.576>everyone <00:49:11.731>else, <00:49:11.887>if <00:49:12.042>you <00:49:12.198>have <00:49:12.353>other <00:49:12.509>questions <00:49:12.665>to,

1015
00:49:14.505 --> 00:49:16.125
<00:49:14.505>to <00:49:14.738>Maurice, <00:49:14.971>you <00:49:15.205>can <00:49:15.438>find <00:49:15.671>his, <00:49:15.905>uh,

1016
00:49:16.145 --> 00:49:18.485
<00:49:16.145>social <00:49:16.378>profiles <00:49:16.611>also <00:49:16.845>on <00:49:17.078>the <00:49:17.311>event <00:49:17.545>page.

1017
00:49:18.985 --> 00:49:21.565
<00:49:18.985>So <00:49:19.140>just <00:49:19.296>click <00:49:19.451>through <00:49:19.607>and <00:49:19.762>get <00:49:19.918>in <00:49:20.073>touch <00:49:20.229>with <00:49:20.385>him.

1018
00:49:22.555 --> 00:49:25.045
<00:49:22.555>Cool. <00:49:22.788>Thanks <00:49:23.021>for <00:49:23.254>having <00:49:23.488>me. <00:49:23.721>Thanks. <00:49:23.955>Bye.