Hearted Youtube comments on Fireship (@Fireship) channel.
-
46000
-
36000
-
23000
-
17000
-
16000
-
13000
-
12000
-
11000
-
10000
-
10000
-
10000
-
9400
-
9400
-
7700
-
I read that guy's paper and his research is so bad! He tried to use git commits to predict things like developer experience, coding time, and end-to-end implementation time, but instead of measuring these labels in the real world, he asked 10 "expert raters" to GUESS the answers. Not only that, 7 of these raters are actually managers/execs, which means they may not be touching code for quite a while now. The sample size is also really small, with only 70 commits, and the raters don't even agree on metrics like the developer's experience, code maintainability, and good structure. Still, the author took those responses and used them to train a Random Forest model to predict similar responses for new commits -- the only problem is that Random Forest models CANNOT READ CODE, so it's IMPOSSIBLE for this model to have ANY understanding of code quality
7400
-
7300
-
7200
-
7100
-
6900
-
6900
-
6500
-
6400
-
6100
-
6100
-
6000
-
5800
-
5800
-
5800
-
5500
-
5200
-
5100
-
4800
-
4800
-
4400
-
4300
-
4200
-
4200
-
4000
-
3900
-
3900
-
3700
-
3700
-
3700
-
3400
-
3400
-
3300
-
3300
-
3200
-
3200
-
3200
-
3000
-
3000
-
2900
-
2900
-
2900
-
2900
-
2900
-
2900
-
2800
-
2800
-
2700
-
2700
-
2700
-
2600
-
2600
-
2500
-
2500
-
2500
-
2500
-
2500
-
2400
-
2400
-
2400
-
2400
-
2400
-
2300
-
2300
-
2300
-
2300
-
2300
-
2300
-
2200
-
2200
-
2200
-
2200
-
2200
-
2100
-
2100
-
2100
-
2100
-
2000
-
2000
-
2000
-
2000
-
1900
-
1900
-
1900
-
1900
-
1900
-
1900
-
1900
-
1900
-
1900
-
1900
-
1800
-
1800
-
1800
-
1800
-
1800
-
1800
-
1700
-
1700
-
1700
-
1700
-
1700
-
1700
-
1600
-
1600
-
1600
-
1600
-
1600
-
1600
-
1600
-
1500
-
1500
-
1500
-
1500
-
1400
-
1400
-
1400
-
1400
-
1400
-
1400
-
1400
-
1400
-
1300
-
1300
-
1300
-
1300
-
1300
-
1300
-
1300
-
1300
-
1300
-
1300
-
1200
-
1200
-
1200
-
1200
-
1200
-
1200
-
1200
-
1200
-
1200
-
1200
-
1200
-
1200
-
1100
-
1100
-
1100
-
1100
-
1100
-
1100
-
1100
-
1100
-
1100
-
1100
-
1000
-
1000
-
1000
-
1000
-
1000
-
1000
-
1000
-
1000
-
1000
-
1000
-
986
-
985
-
983
-
982
-
981
-
981
-
973
-
970
-
955
-
950
-
947
-
939
-
923
-
922
-
904
-
901
-
897
-
894
-
893
-
881
-
879
-
876
-
873
-
871
-
864
-
846
-
845
-
844
-
842
-
841
-
835
-
826
-
825
-
823
-
820
-
816
-
813
-
807
-
803
-
797
-
793
-
790
-
785
-
784
-
777
-
774
-
766
-
762
-
755
-
752
-
752
-
736
-
730
-
728
-
724
-
722
-
721
-
719
-
718
-
705
-
702
-
702
-
702
-
700
-
697
-
696
-
692
-
690
-
687
-
685
-
682
-
675
-
661
-
657
-
654
-
653
-
652
-
651
-
645
-
645
-
644
-
641
-
629
-
625
-
622
-
620
-
619
-
617
-
614
-
611
-
609
-
605
-
604
-
601
-
601
-
594
-
591
-
588
-
586
-
584
-
583
-
581
-
580
-
579
-
578
-
572
-
572
-
567
-
559
-
558
-
557
-
556
-
556
-
550
-
549
-
541
-
541
-
538
-
Some thoughts:
EDIT: Please stop telling me about `#!/bin/sh`. This video is specifically about bash and so is this comment. I am aware that posix sh... exists. If you want to write POSIX compliant scripts, use sh. If you want to write modern scripts, use BASH. Also: even if you use sh instead of bash, you may still be writing bash. The best way to test for that would be shellcheck.
Oh and `/bin/sh` is not specified ny posix either, so you'll probably still want to use `#!/usr/bin/env sh`.
- Please do not use `#!/bin/bash` or `#!/usr/bin/bash` as your shebeng. Instead use `#!/usr/bin/env bash`. This way, bash can be installed pretty much anywhere and it will still work.
- Please always put double qoutes around variables unless you specifically need them unqouted (which you do when loop over an array using a for-loop for example). This will prevent unintended splitting of strings. Note that in bash single qoutes ('), double qoutes (") and backticks (`) all have a different meaning. Speaking of backticks:
- Whenever you see a stackoverflow answer around processing a command's output, you will probably see someone using a command enclosed by backticks. This is deprecated and should not be used. Instead, you can use $(command). However, you should also double qoute that, so "$(command)".
- Variables don't have to be all-caps. However, if you use them like " $VARsomething" where only VAR is the variable name, you may need to use curly brackets to signal bash where the variable starts and ends: "${VAR}something". Those can also be used for substitutions, which I recommend you just look up ;).
528
-
528
-
520
-
519
-
513
-
512
-
511
-
509
-
501
-
499
-
497
-
497
-
496
-
494
-
493
-
486
-
486
-
484
-
484
-
483
-
478
-
477
-
476
-
471
-
469
-
469
-
468
-
466
-
463
-
461
-
461
-
455
-
452
-
452
-
445
-
443
-
439
-
439
-
438
-
430
-
424
-
422
-
422
-
422
-
422
-
421
-
418
-
418
-
417
-
416
-
415
-
414
-
408
-
404
-
404
-
403
-
401
-
399
-
398
-
395
-
392
-
391
-
391
-
390
-
389
-
389
-
388
-
388
-
388
-
387
-
387
-
383
-
383
-
383
-
382
-
382
-
375
-
374
-
373
-
373
-
372
-
371
-
370
-
369
-
368
-
364
-
363
-
362
-
362
-
361
-
356
-
356
-
351
-
350
-
349
-
346
-
345
-
344
-
344
-
343
-
343
-
342
-
340
-
339
-
338
-
337
-
336
-
335
-
333
-
333
-
333
-
331
-
330
-
329
-
327
-
324
-
324
-
324
-
324
-
318
-
317
-
317
-
316
-
313
-
313
-
312
-
312
-
311
-
311
-
309
-
309
-
309
-
309
-
309
-
309
-
309
-
308
-
308
-
303
-
302
-
301
-
299
-
299
-
298
-
298
-
298
-
297
-
294
-
293
-
293
-
292
-
289
-
287
-
287
-
283
-
282
-
281
-
280
-
280
-
279
-
279
-
278
-
277
-
277
-
275
-
275
-
272
-
270
-
269
-
269
-
268
-
266
-
266
-
264
-
262
-
262
-
262
-
260
-
257
-
256
-
255
-
254
-
253
-
253
-
251
-
249
-
247
-
247
-
247
-
244
-
244
-
242
-
240
-
239
-
239
-
238
-
235
-
233
-
233
-
233
-
233
-
232
-
232
-
230
-
229
-
228
-
227
-
225
-
224
-
222
-
221
-
220
-
219
-
218
-
218
-
217
-
216
-
216
-
214
-
213
-
213
-
213
-
213
-
212
-
212
-
212
-
211
-
210
-
210
-
210
-
209
-
208
-
207
-
207
-
207
-
206
-
205
-
205
-
203
-
202
-
199
-
199
-
198
-
197
-
196
-
194
-
194
-
193
-
193
-
191
-
191
-
190
-
189
-
188
-
188
-
188
-
188
-
187
-
186
-
185
-
184
-
180
-
180
-
179
-
178
-
177
-
176
-
176
-
175
-
174
-
173
-
172
-
172
-
172
-
172
-
171
-
171
-
170
-
170
-
170
-
170
-
169
-
169
-
169
-
169
-
169
-
168
-
168
-
168
-
166
-
165
-
164
-
162
-
162
-
161
-
161
-
161
-
160
-
160
-
159
-
159
-
158
-
158
-
158
-
157
-
157
-
157
-
157
-
156
-
155
-
155
-
155
-
154
-
153
-
153
-
153
-
152
-
151
-
151
-
149
-
149
-
149
-
148
-
146
-
146
-
146
-
145
-
145
-
144
-
144
-
144
-
143
-
141
-
141
-
141
-
141
-
140
-
140
-
140
-
140
-
139
-
139
-
139
-
139
-
138
-
137
-
136
-
136
-
135
-
135
-
135
-
134
-
133
-
133
-
132
-
132
-
131
-
131
-
131
-
131
-
131
-
131
-
129
-
128
-
128
-
128
-
126
-
126
-
126
-
125
-
124
-
124
-
124
-
123
-
122
-
122
-
122
-
122
-
121
-
121
-
121
-
121
-
120
-
120
-
120
-
119
-
118
-
117
-
117
-
117
-
116
-
115
-
115
-
114
-
114
-
113
-
113
-
113
-
112
-
112
-
112
-
111
-
110
-
110
-
110
-
109
-
108
-
107
-
106
-
106
-
104
-
104
-
104
-
103
-
103
-
103
-
101
-
101
-
101
-
101
-
100
-
99
-
99
-
99
-
98
-
98
-
98
-
97
-
97
-
96
-
96
-
95
-
95
-
94
-
94
-
93
-
92
-
92
-
92
-
92
-
92
-
91
-
91
-
90
-
90
-
90
-
90
-
90
-
89
-
89
-
89
-
89
-
89
-
89
-
88
-
88
-
87
-
87
-
87
-
86
-
85
-
83
-
83
-
83
-
83
-
83
-
82
-
82
-
82
-
82
-
82
-
82
-
81
-
79
-
79
-
79
-
78
-
78
-
78
-
78
-
78
-
Ok, i am gonna say this. right here. right now. I have stopped for long now.
The day i started learning vim, i got the vim in 100 seconds that night.
The day i decided to learn graphql, i got the 100 seconds of graphql next day.
The day i decided to check what NextJS was, i got its 100 seconds 2 hours later.
The day I switch to linux, you start uploading linux-related videos like directories in linux, history of linux.
The day i decide to add calls to my app, you release web rtc video
A hackathon is going on and no one of my teammates know how to work with cors, ur 100 second video comes up.
I switched to svelte about 3 days ago completely for all my work, and here i am!
I never said this before because many people say the same thing and then others think that i am just copying the popular commands, but im gonna be honest, im not! This all happened for real :0
I dont think i can ever thank you enough man. keep up the good work
78
-
77
-
77
-
76
-
76
-
76
-
75
-
75
-
75
-
75
-
75
-
75
-
74
-
74
-
74
-
73
-
73
-
73
-
72
-
71
-
71
-
71
-
71
-
70
-
70
-
70
-
70
-
70
-
70
-
70
-
70
-
69
-
69
-
69
-
69
-
69
-
69
-
69
-
68
-
68
-
68
-
68
-
68
-
68
-
68
-
67
-
67
-
67
-
66
-
66
-
66
-
66
-
65
-
65
-
65
-
65
-
64
-
I have some counterpoints about React. I started with Angular 2-6, looking at React and thinking Angular was better. I have switched over to using React 40 hrs/week for the last few months. I like React much better.
1. Router
The routing components in React are really not that complicated. Compare: { path: '/home', component: HomeComponent} to: <Route path="/home" component={Home} />. Nested routes and paramaterized routes work very much the same as in Angular. The main difference is, rather than having a separate route config which needs to be loaded into a module, you define the route exactly where the route shows on the page.. I find this to be more clear than having unmarked <router-outlet>s and modules. If you need separation of concerns, you can easily put all of the routes in their own file.
2. CLI
I always loved the Angular CLI, so I was initially disappointed when React didn't have their own. There are a few third-party CLIs for generating components, but I've actually found Snippets to be the best way to scaffold components. For VSCode there's a bunch of options for React snippets. Over time I've built my own, but it's really great to just create a file, type "rc" and have a full react component appear with cursor positions set for the main points. In React, components start out as just one file anyway, so there's much less need for a generator when there's virtually no boilerplate involved.
3. DI
When thinking in the "Angular" way it seems like all is lost without dependency injection. React really involves a different paradigm of development than Angular, and it usually just doesn't need DI. You also didn't mention Higher Order Components, which are a huge thing in React allowing for DI and a host of other features. Many apps don't actually need Redux, especially when using Apollo client with GraphQL (which is f--ing amazing by the way!)
4. Angular is easier to read/simpler
I guess this one really comes down to opinion or what you're used to, but I find complex Angular templates to be MUCH more difficult to read than complex React templates. Using things like *ngIf and *ngFor abstracts away from the javascript in a way that looks very clean with 3 lines of code, but becomes a mess with a much larger component. With JSX you are literally using elements as javascript objects, which gives you a ton of flexibility besides just chucking everything into an HTML-ish file. Separating components into their own files is extremely easy and clean with ES6 syntax, you can just use an arrow function with argument destructuring and directly return a tree of JSX. It feels very liberating compared to being bound to templates. Using "className" is one of the only few caveats you'll run into, and that's more than fair in exchange for *ngIf, *ngFor, *ngSwitch, binding syntax, two-way binding, ngModel, etc.
Also, in your "react vs angular" example with *ngFor, you wrote the React example in a messier way than it could be. You should destructure the state at the top of the render function, then you can simply write:
{items.map(item => <h3>{item}</h3>)}
I find this very easy to read :)
tl;dr
Angular is extremely powerful and deserves all the credit for what it is, but you overshadowed some really great things about React that you may change your mind about one day. :)
64
-
64
-
64
-
64
-
63
-
63
-
62
-
62
-
62
-
62
-
62
-
62
-
62
-
61
-
61
-
61
-
61
-
61
-
60
-
60
-
60
-
60
-
60
-
60
-
60
-
59
-
59
-
58
-
58
-
58
-
57
-
57
-
57
-
I'm an Angular and React developer and I honestly prefer Angular. What are the arguments for React exactly ? It's lighter ? Is it faster ? I really don't like JSX. The fact that all components have to be wrapped in a parent element, the syntax to display a list, the required key attribute, the myFn.bind(this) for each function in my components, etc. I love my Angular services, the Angular directives, the component syntax, animations are amazing to use, the routing is great, the Input and Output are so elegant... Anyway, I don't understand the hype for React. Even if I'm currently working on a React project for my client. He has probably been convinced by another biaised study
57
-
57
-
57
-
57
-
56
-
56
-
56
-
56
-
56
-
56
-
56
-
56
-
55
-
55
-
55
-
55
-
55
-
55
-
55
-
54
-
54
-
54
-
54
-
54
-
54
-
53
-
53
-
53
-
53
-
53
-
53
-
52
-
52
-
52
-
51
-
51
-
51
-
51
-
51
-
51
-
51
-
50
-
50
-
50
-
50
-
50
-
50
-
49
-
49
-
49
-
48
-
48
-
48
-
47
-
47
-
47
-
47
-
47
-
47
-
46
-
46
-
46
-
46
-
45
-
45
-
45
-
45
-
45
-
45
-
44
-
44
-
44
-
44
-
44
-
43
-
43
-
43
-
43
-
42
-
42
-
42
-
42
-
42
-
42
-
42
-
42
-
42
-
42
-
42
-
42
-
41
-
41
-
41
-
41
-
41
-
41
-
41
-
40
-
40
-
40
-
40
-
40
-
40
-
40
-
40
-
39
-
39
-
39
-
39
-
38
-
38
-
38
-
38
-
38
-
38
-
38
-
38
-
38
-
38
-
37
-
37
-
37
-
37
-
37
-
37
-
37
-
37
-
37
-
36
-
36
-
36
-
36
-
36
-
36
-
36
-
36
-
35
-
35
-
35
-
35
-
35
-
35
-
35
-
35
-
35
-
35
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
34
-
33
-
33
-
33
-
33
-
33
-
33
-
33
-
33
-
33
-
33
-
33
-
33
-
32
-
32
-
32
-
32
-
32
-
32
-
32
-
32
-
32
-
32
-
32
-
32
-
32
-
31
-
31
-
31
-
31
-
31
-
31
-
31
-
31
-
31
-
31
-
31
-
31
-
31
-
30
-
30
-
30
-
30
-
30
-
30
-
30
-
30
-
30
-
30
-
30
-
29
-
29
-
29
-
29
-
29
-
29
-
29
-
29
-
29
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
28
-
27
-
27
-
27
-
27
-
27
-
27
-
27
-
27
-
27
-
26
-
26
-
26
-
26
-
26
-
26
-
26
-
26
-
26
-
26
-
26
-
26
-
26
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
25
-
24
-
I'm not saying this to be cynical, nor am I saying it to sound like I'll never put in the work to become a web dev, but what this video shows me is a confirmation that getting a job in the tech industry is, like with most high-prestige, high-paying jobs, a popularity contest. I never liked popularity contests. They seem exhausting.
Again, not being cynical, it's just I think my time would be better spent working and making money as a welder and focusing on other things in life for now, while still studying tech on the side in my free time. I mostly got into it to both compensate for dropping out of college and to desperately try and band wagon onto the digital nomad train to return to some friends abroad, but since then, my mentality about things and my view of the world and the horizon has broadened, and I've found other means of getting by.
But, hey, cool, whatever. Who knows maybe I'll code and meme myself into a position by pure accident some day! I still do like coding and still love your videos!
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
24
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
23
-
22
-
22
-
22
-
I hate being a full-stack dev.. I have knowledge of everything, but mostly just below the surface. Good at everything, but people who focus on separate parts are better ofc. I'm not that type of intellect who can dive deep into this stuff. I'm glad I started using Angular some years ago (at this point version 7, there will probably be another version when you read this) which thought me already so much about the frontend and keeps me / forces me to be "updated" on this world, but every time I see a tutorial from you, which I really love and appreciate, it shows me how for back I am on this stuff because I'm "stuck" in my comfort zone using RDMS systems, writing API's (to keep back and front clean and separate), setting up and managing linux servers, .. While all that.. could be handled by just using Firebase for example and 5 simple minutes...I wrote this 'functionality' a while ago for a project.. using a combination of WebSockets, NodeJS and a PHP API.. the pain I went though and now seeing this.. just subscribing to RTDB's events.. damnit.. Why does this technology improve so fast :D <3
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
22
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
21
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
20
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
19
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
18
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
16
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
14
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
13
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
12
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
11
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
10
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
9
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
8
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
7
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
5
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
46, 54, 58, 64, 66, 70, 78, 81, 82, 83, 84, 85, 86, 89, 91, 93 are very useful thanks! a useful tip you didn't mention always paginate to reduce costs even further especially for countries in Africa where dollar it's pretty high.
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
4
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
I know about half a dozen languages at a professional level, and CSS is so deep that it was the language I was at an amateur level at for the longest, deep rather than difficult. I love CSS and have no issues with it (especially when using it as SCSS so I can nest selectors and tools such as loops). There are so many combinations and someone finds something new every day so there's a lot of time spent looking at other people's work (usually on Codepen) to see what they've done. It takes a year of frequent practicing to legitimately become a professional, you can learn the basics in a weekend, but it takes so many projects to cover everything (a problem with CSS is that to learn you need to do more substantial project so everything works together, while with other languages you only need to write a small function to cover a new concept)
Out of my mental catalogue of code snippets for all of the languages I know CSS is by far the biggest but I wouldn't change that because art is deep.
Also CSS is a programming language (not turing complete though), HTML is not a programming language (at all). You can use selectors as logic gates to create, aptly named, combinational logic which can be used to compute values based on inputs (like you can create CSS only tic-tac-toe and hangman with win/lose condidions, which requires some computation)
My tip would be: Learn to use em and rem for basically everything that px used to do (it's ok to use px for anything that doesn't have a layout impact like 1px border rather than a 0.0625rem border). Your layout is then based on font size which both pairs layout size with the stuff people care about but also you are able to scale the site with ease by just changing the root font size and makes website design fit whatever the layout is - if the font is set to a size that the user can read then the layout looks the same which works really well with retina displays (you don't have to touch scaling because the browser already scales the text and your layout rides on it). Also it's a really nice unit length which is far easier to plan with than pixels and gives the layout a more uniform layout as everything is a factor or multiple of the same base.
How it works is em is based on the current font size so by default 1em is 16px, but if the font is made to be 2em in the parent then 1em in the child is 32px which is proportional to text. rem on the other hand is based on the root font size and in the same situation 1rem is always 16px no matter what the font-size of the child is. Use em unless you know you want rem.
Also inside calc() you need spaces around the operator, it's really dumb and I don't like it. It should know calc(100vw-4rem) is what it says.
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
for anyone trying to learn git
PLEASE use a git client rather than using the command line
using a client doesn't make you less of a programmer than people want you to believe
in fact, using a client gives you a perfect view on your history, easy set of commands you usually run together, etc...
git clients are used to make your life easier, so please dont ignore them because some jackass told you git should be ran from the command line
that being said, once you are familiar with git in client form, make sure you learn atleast the following commands on the command line: pull, checkout, clone (optional, init, add remote)
most servers you are going to be working on might be fully terminal based, so when you want to pull your branch to production, you are going to have to do it through the command line
luckily there are cheatsheets for this tho :p
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
3
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
Ha! Bingo!
I’ve actually used every single paradigm in that listing for various customer projects, including time-series database (but not data warehouse) and also object databases, which I would have seen mentioned . Couldn’t agree more with the “right-tool-for-the-job”-dad.
Fauna looks neat, but I wouldn’t call it a database paradigm. Have used AWS AppSync in front of Aurora serverless and DynamoDB simultaneously which is kind of the same thing, and I’ve also developed a GraphQL API facading Neo4j, DynamoDB and MSSQL for another project.
I’ve used Memcached, Berkeley, Coherence, DynamoDB, Mongo, CouchDB, Berkeley XML (awesome), Postgres, MySQL, MySQL NDB (now, that one is truly awesome!), AWS Aurora, SQLite, Derby, MSSQL (yuck), Oracle, Oracle RAC, TimesTen, neo4j (love it!), Elasticsearch, SOLR, Timescale, ObjectDB. Played around and evaluated a few more, and maybe forgot one or two...
What can I say - I like to use the right database for the job 😁
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1