-
-
Notifications
You must be signed in to change notification settings - Fork 21
/
index.html
231 lines (226 loc) · 162 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><style data-href="/styles.f4dbc894744c3c869f21.css" id="gatsby-global-css">@import url(https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap);.post--2021--binary-floating-point--bit-button:hover{box-shadow:0 0 5px 1px rgba(0,0,0,.2);transition:box-shadow .2s ease-in-out}input:checked~.toggle__dot{transform:translateX(100%)}input:checked~.toggle__line{background-color:#48bb78}.post--2021--water-line--gyro-cube .gyro-cube-container{height:400px;display:flex;justify-content:center;align-items:center;perspective:800px;perspective-origin:50%}.post--2021--water-line--gyro-cube .gyro-cube{position:relative;width:200px;height:200px;transform-style:preserve-3d}.post--2021--water-line--gyro-cube .gyro-cube-side{position:absolute;width:100%;height:100%;opacity:.8;border:2px solid #fff;display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;font-size:100px}.post--2021--water-line--gyro-cube .gyro-cube-front{background-color:#d50000;transform:translateZ(100px)}.post--2021--water-line--gyro-cube .gyro-cube-back{background-color:#a0f;transform:translateZ(-100px)}.post--2021--water-line--gyro-cube .gyro-cube-left{background-color:#304ffe;transform:translateX(100px) rotateY(90deg)}.post--2021--water-line--gyro-cube .gyro-cube-right{background-color:#0091ea;transform:translateX(-100px) rotateY(90deg)}.post--2021--water-line--gyro-cube .gyro-cube-top{background-color:#00bfa5;transform:translateY(-100px) rotateX(90deg)}.post--2021--water-line--gyro-cube .gyro-cube-bottom{background-color:#64dd17;transform:translateY(100px) rotateX(90deg)}.custom-fade-in-opacity{opacity:1;-webkit-animation-name:customFadeInOpacity;animation-name:customFadeInOpacity;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-duration:.8s;animation-duration:.8s}@-webkit-keyframes customFadeInOpacity{0%{opacity:0}to{opacity:1}}@keyframes customFadeInOpacity{0%{opacity:0}to{opacity:1}}.prose blockquote p:first-of-type:before,.prose blockquote p:last-of-type:after,.prose code:after,.prose code:before{content:""!important}.prose blockquote{font-weight:400!important}.prose li code.language-text,.prose p code.language-text,.prose td code.language-text,.prose th code.language-text,.prose tr code.language-text{padding:2px 5px 1px;font-weight:400}.prose p>img{margin:auto}.prose h1>a.gatsby-remark-autolink-header-anchor,.prose h2>a.gatsby-remark-autolink-header-anchor,.prose h3>a.gatsby-remark-autolink-header-anchor,.prose h4>a.gatsby-remark-autolink-header-anchor,.prose h5>a.gatsby-remark-autolink-header-anchor{visibility:hidden;display:inline-block;margin-left:10px}.prose h1:hover>a.gatsby-remark-autolink-header-anchor,.prose h2:hover>a.gatsby-remark-autolink-header-anchor,.prose h3:hover>a.gatsby-remark-autolink-header-anchor,.prose h4:hover>a.gatsby-remark-autolink-header-anchor,.prose h5:hover>a.gatsby-remark-autolink-header-anchor{visibility:visible}
/* ! tailwindcss v2.1.2 | MIT License | https://tailwindcss.com */
/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:Roboto,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:#374151;max-width:65ch}.prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#dc2626;text-decoration:underline;font-weight:500}.prose a:hover{color:#ef4444}.prose strong{color:#111827;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#6b7280;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d1d5db;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e5e7eb;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#111827;border-left-width:.25rem;border-left-color:#e5e7eb;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#111827;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#111827;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#111827;font-weight:600}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#111827;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#111827}.prose pre{color:#e5e7eb;background-color:#1f2937;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#111827;font-weight:600;border-bottom-width:1px;border-bottom-color:#d1d5db}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e5e7eb}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm p{margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm [class~=lead]{font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm blockquote{margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.1111111em}.prose-sm h1{font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm h2{font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm h3{font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm h4{margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm figure,.prose-sm img,.prose-sm video{margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm figure>*{margin-top:0;margin-bottom:0}.prose-sm figure figcaption{font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm code{font-size:.8571429em}.prose-sm h2 code{font-size:.9em}.prose-sm h3 code{font-size:.8888889em}.prose-sm pre{font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding:.6666667em 1em}.prose-sm ol,.prose-sm ul{margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm li{margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm ol>li{padding-left:1.5714286em}.prose-sm ol>li:before{left:0}.prose-sm ul>li{padding-left:1.5714286em}.prose-sm ul>li:before{height:.3571429em;width:.3571429em;top:.67857em;left:.2142857em}.prose-sm>ul>li p{margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm>ul>li>:first-child{margin-top:1.1428571em}.prose-sm>ul>li>:last-child{margin-bottom:1.1428571em}.prose-sm>ol>li>:first-child{margin-top:1.1428571em}.prose-sm>ol>li>:last-child{margin-bottom:1.1428571em}.prose-sm ol ol,.prose-sm ol ul,.prose-sm ul ol,.prose-sm ul ul{margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm hr{margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm h2+*,.prose-sm h3+*,.prose-sm h4+*,.prose-sm hr+*{margin-top:0}.prose-sm table{font-size:.8571429em;line-height:1.5}.prose-sm thead th{padding-right:1em;padding-bottom:.6666667em;padding-left:1em}.prose-sm thead th:first-child{padding-left:0}.prose-sm thead th:last-child{padding-right:0}.prose-sm tbody td{padding:.6666667em 1em}.prose-sm tbody td:first-child{padding-left:0}.prose-sm tbody td:last-child{padding-right:0}.prose-sm>:first-child{margin-top:0}.prose-sm>:last-child{margin-bottom:0}.prose-red a,.prose-red a code{color:#dc2626}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-black{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(156,163,175,var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgba(254,226,226,var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgba(219,234,254,var(--tw-bg-opacity))}.hover\:bg-black:hover{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgba(31,41,55,var(--tw-bg-opacity))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgba(239,68,68,var(--tw-bg-opacity))}.bg-cover{background-size:cover}.border-black{--tw-border-opacity:1;border-color:rgba(0,0,0,var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgba(255,255,255,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(209,213,219,var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgba(156,163,175,var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgba(239,68,68,var(--tw-border-opacity))}.hover\:border-white:hover{--tw-border-opacity:1;border-color:rgba(255,255,255,var(--tw-border-opacity))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgba(156,163,175,var(--tw-border-opacity))}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-full{border-radius:9999px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border{border-width:1px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-self-end{justify-self:end}.flex-1{flex:1 1 0%}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.h-0{height:0}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-48{height:12rem}.h-64{height:16rem}.h-96{height:24rem}.h-0\.5{height:.125rem}.h-full{height:100%}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.m-auto{margin:auto}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mr-5{margin-right:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.mb-12{margin-bottom:3rem}.mt-16{margin-top:4rem}.max-w-md{max-width:28rem}.max-w-screen-xl{max-width:1280px}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.p-6{padding:1.5rem}.p-8{padding:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.pb-6{padding-bottom:1.5rem}.static{position:static}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.left-0{left:0}.resize{resize:both}*{--tw-shadow:0 0 transparent}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06)}.shadow-inner,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,0.06)}.shadow-card{--tw-shadow:0 2px 1px -1px rgba(0,0,0,0.2),0 1px 1px 0 rgba(0,0,0,0.14),0 1px 3px 0 rgba(0,0,0,0.12);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}*{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}.text-center{text-align:center}.text-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(156,163,175,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.uppercase{text-transform:uppercase}.underline{text-decoration:underline}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.whitespace-nowrap{white-space:nowrap}.w-1{width:.25rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-36{width:9rem}.w-64{width:16rem}.w-full{width:100%}.gap-12{gap:3rem}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}.hover\:-translate-y-1:hover{--tw-translate-y:-0.25rem}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.duration-500{transition-duration:.5s}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale:grayscale(100%)}@media (min-width:640px){.sm\:prose{color:#374151;max-width:65ch}.sm\:prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.sm\:prose a{color:#dc2626;text-decoration:underline;font-weight:500}.sm\:prose a:hover{color:#ef4444}.sm\:prose strong{color:#111827;font-weight:600}.sm\:prose ol[type=A]{--list-counter-style:upper-alpha}.sm\:prose ol[type=a]{--list-counter-style:lower-alpha}.sm\:prose ol[type=I]{--list-counter-style:upper-roman}.sm\:prose ol[type=i]{--list-counter-style:lower-roman}.sm\:prose ol[type="1"]{--list-counter-style:decimal}.sm\:prose ol>li{position:relative;padding-left:1.75em}.sm\:prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#6b7280;left:0}.sm\:prose ul>li{position:relative;padding-left:1.75em}.sm\:prose ul>li:before{content:"";position:absolute;background-color:#d1d5db;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.sm\:prose hr{border-color:#e5e7eb;border-top-width:1px;margin-top:3em;margin-bottom:3em}.sm\:prose blockquote{font-weight:500;font-style:italic;color:#111827;border-left-width:.25rem;border-left-color:#e5e7eb;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.sm\:prose blockquote p:first-of-type:before{content:open-quote}.sm\:prose blockquote p:last-of-type:after{content:close-quote}.sm\:prose h1{color:#111827;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.sm\:prose h2{color:#111827;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.sm\:prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.sm\:prose h3,.sm\:prose h4{color:#111827;font-weight:600}.sm\:prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.sm\:prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.sm\:prose code{color:#111827;font-weight:600;font-size:.875em}.sm\:prose code:after,.sm\:prose code:before{content:"`"}.sm\:prose a code{color:#111827}.sm\:prose pre{color:#e5e7eb;background-color:#1f2937;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.sm\:prose pre code{background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.sm\:prose pre code:after,.sm\:prose pre code:before{content:none}.sm\:prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.sm\:prose thead{color:#111827;font-weight:600;border-bottom-width:1px;border-bottom-color:#d1d5db}.sm\:prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.sm\:prose tbody tr{border-bottom-width:1px;border-bottom-color:#e5e7eb}.sm\:prose tbody tr:last-child{border-bottom-width:0}.sm\:prose tbody td{vertical-align:top;padding:.5714286em}.sm\:prose{font-size:1rem;line-height:1.75}.sm\:prose p{margin-top:1.25em;margin-bottom:1.25em}.sm\:prose figure,.sm\:prose img,.sm\:prose video{margin-top:2em;margin-bottom:2em}.sm\:prose figure>*{margin-top:0;margin-bottom:0}.sm\:prose h2 code{font-size:.875em}.sm\:prose h3 code{font-size:.9em}.sm\:prose ol,.sm\:prose ul{margin-top:1.25em;margin-bottom:1.25em}.sm\:prose li{margin-top:.5em;margin-bottom:.5em}.sm\:prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.sm\:prose>ul>li>:first-child{margin-top:1.25em}.sm\:prose>ul>li>:last-child{margin-bottom:1.25em}.sm\:prose>ol>li>:first-child{margin-top:1.25em}.sm\:prose>ol>li>:last-child{margin-bottom:1.25em}.sm\:prose ol ol,.sm\:prose ol ul,.sm\:prose ul ol,.sm\:prose ul ul{margin-top:.75em;margin-bottom:.75em}.sm\:prose h2+*,.sm\:prose h3+*,.sm\:prose h4+*,.sm\:prose hr+*{margin-top:0}.sm\:prose thead th:first-child{padding-left:0}.sm\:prose thead th:last-child{padding-right:0}.sm\:prose tbody td:first-child{padding-left:0}.sm\:prose tbody td:last-child{padding-right:0}.sm\:prose>:first-child{margin-top:0}.sm\:prose>:last-child{margin-bottom:0}.sm\:flex{display:flex}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:flex-1{flex:1 1 0%}.sm\:h-auto{height:auto}.sm\:mb-0{margin-bottom:0}.sm\:mr-6{margin-right:1.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:text-left{text-align:left}.sm\:w-2\/5{width:40%}.sm\:w-3\/5{width:60%}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:w-3\/4{width:75%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:none;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8292a2}.token.punctuation{color:#f8f8f2}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a6e22e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#e6db74}.token.keyword{color:#66d9ef}.token.important,.token.regex{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}</style><meta name="generator" content="Gatsby 3.4.0"/><title data-react-helmet="true">Trekhleb | Blog</title><meta data-react-helmet="true" name="description" content="Articles about life, web-development and machine-learning"/><meta data-react-helmet="true" name="image" content="https://trekhleb.dev/static-assets/images/site-meta-image-01.png"/><meta data-react-helmet="true" property="og:title" content="Trekhleb | Blog"/><meta data-react-helmet="true" property="og:description" content="Articles about life, web-development and machine-learning"/><meta data-react-helmet="true" property="og:url" content="https://trekhleb.dev/blog/"/><meta data-react-helmet="true" property="og:image" content="https://trekhleb.dev/static-assets/images/site-meta-image-01.png"/><meta data-react-helmet="true" property="og:type" content="website"/><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"/><meta data-react-helmet="true" name="twitter:creator" content="@Trekhleb"/><meta data-react-helmet="true" name="twitter:title" content="Trekhleb | Blog"/><meta data-react-helmet="true" name="twitter:description" content="Articles about life, web-development and machine-learning"/><meta data-react-helmet="true" name="twitter:image" content="https://trekhleb.dev/static-assets/images/site-meta-image-01.png"/><meta data-react-helmet="true" name="twitter:url" content="https://trekhleb.dev/blog/"/><link rel="preconnect dns-prefetch" href="https://www.google-analytics.com"/><link rel="alternate" type="application/rss+xml" title="Trekhleb.dev RSS Feed" href="/rss.xml"/><link as="script" rel="preload" href="/webpack-runtime-6451c7fe678794e00b4b.js"/><link as="script" rel="preload" href="/framework-d63adeb7e1b44b7b8aa5.js"/><link as="script" rel="preload" href="/app-2e0826ec06cafce3bdee.js"/><link as="script" rel="preload" href="/commons-213c962999d4e181c8a0.js"/><link as="script" rel="preload" href="/1254dea0549e67f9c6b7574de1277b85c557acbf-5b8be32205ce327d28c3.js"/><link as="script" rel="preload" href="/component---src-pages-blog-tsx-09e5ed745cd76684f8ac.js"/><link as="fetch" rel="preload" href="/page-data/blog/page-data.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/sq/d/2849418690.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/app-data.json" crossorigin="anonymous"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><main class="flex flex-col items-center"><div class="max-w-screen-xl self-stretch m-auto w-full"><header class="flex flex-row items-center px-6 sm:px-12 py-6"><div class="mr-6"><div><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 font-extrabold text-sm tracking-widest uppercase" href="/">Trekhleb</a></div></div><nav><ul class="flex flex-row"><li class="ml-5"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 uppercase text-xs" href="/">About</a></li><li class="ml-5"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 uppercase text-xs" href="/projects/">Projects</a></li><li class="ml-5"><a aria-current="page" class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 uppercase text-xs font-bold" href="/blog/">Blog</a></li></ul></nav></header><article class="px-6 sm:px-12 py-6"><div class="flex flex-row items-center "><h1 class="text-3xl mb-6 uppercase font-extrabold ">Blog</h1><div class="bg-gray-200 px-1 rounded text-xs ml-3 self-start">33</div></div><div class="grid gap-12 grid-cols-1"><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2021/top-33-javascript-projects-on-github/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACV0lEQVQozx2S20sUUQCH56/oQaLMcO9nzjlzzux1dtwx3JvOOWMIKWWEYFQKeYHSErraSxIGQSBRvZSCEgWtDz4oIYqJkIWiu66ra7oJaYumbqVSbK8/+OD74CfcbFHNVtHlQgDA6ip38xWlVKMQQlnGJrN4o0WdHdUpwZQiCKHiI02XlXNnPAghWSZC113tWCEoLAJXL/k34zyX5p+Gy90uSZKQ3QFrqtxzY7rPS46fcFAqfXgX3Vvme8tGe7NqtWMh80Xvuqd1dgRWp9lhhh9kjMSE7vEQQlCxSayr9e6vVQ71h683+Qf7woffjFya/10/fadNtVixsJ1i+2vGn9X8OtgX7mhVK3UXhEiSkKrQof7w9iLbSrLdZWMnxVKT+qP7WkO9IlNMKRGyCbYxp/+I69/nWECVC47aRRFSmnduqPdnF4yXT7TuzpKnDwMDz091dgSOFACzRcQY5pu3kuz3V55Ls60k735QGgk6XS4JoTxvMoutjer0SPTzSGRmNJKaKh+PRc/XeAMqReg/vDHPY72hsVh0d4nvpPjGPBuPRf0KQThvTghemmILExXvX4XXZ9ivFb4ZZ+uzvL1FdQAstDeXWKwQY2n4TeQgw3+m2N6KwStcDgAxRl6P9OxxsFSTi06KjReVXNrIJvS/2crXPWUWmyS43ZQQZLOJ1VXuxUl9M84GXoQIwZKEHABGQvLtNs1kgbKMHAD19gSzCZb8qF846wUiFupqfTa7KFMEROhXSKhMxhjlP0BRsVm8da1k5G0UiIgQhDHCEg4HnT4vAQA6neQfj6/wD+Kg52IAAAAASUVORK5CYII=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/28795a020d804fc156da85331b7e7924/bd3a8/01-cover.png 250w,
/static/28795a020d804fc156da85331b7e7924/0757b/01-cover.png 500w,
/static/28795a020d804fc156da85331b7e7924/eb0de/01-cover.png 1000w,
/static/28795a020d804fc156da85331b7e7924/37d21/01-cover.png 1280w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/28795a020d804fc156da85331b7e7924/bd3a8/01-cover.png 250w,
/static/28795a020d804fc156da85331b7e7924/0757b/01-cover.png 500w,
/static/28795a020d804fc156da85331b7e7924/eb0de/01-cover.png 1000w,
/static/28795a020d804fc156da85331b7e7924/37d21/01-cover.png 1280w" src="/static/28795a020d804fc156da85331b7e7924/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2021/top-33-javascript-projects-on-github/"><h3 class="text-xl ">Top 33 JavaScript Projects on GitHub (November 2021)</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Nov 13, 2021</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">Snapshot of the 33 most starred open-sourced JavaScript repositories on GitHub as of November 2021</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2021/self-parking-car-evolution/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:54.400000000000006%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIBAwT/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAHfFpWSjDP/xAAYEAACAwAAAAAAAAAAAAAAAAABEQAQIv/aAAgBAQABBQJ6cBYv/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBAAAQMFAAAAAAAAAAAAAAAAAAERICIxMoGh/9oACAEBAAY/AstC1cLvD//EABsQAAEEAwAAAAAAAAAAAAAAAAEAETFBIIGh/9oACAEBAAE/IQ5oDRQCQuiF0MP/2gAMAwEAAgADAAAAEAwv/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQMBAT8QEn//xAAWEQEBAQAAAAAAAAAAAAAAAAABEEH/2gAIAQIBAT8QRyf/xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhMRBBgZH/2gAIAQEAAT8QFnK2MvsKoPgQRQdEFXKL0cGNT//Z" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/14b49be9f15dfe3fccf2e51520529e6c/d2e8d/01-cover-00.jpg 250w,
/static/14b49be9f15dfe3fccf2e51520529e6c/55b1d/01-cover-00.jpg 500w,
/static/14b49be9f15dfe3fccf2e51520529e6c/9aebb/01-cover-00.jpg 1000w,
/static/14b49be9f15dfe3fccf2e51520529e6c/e8f68/01-cover-00.jpg 1179w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/14b49be9f15dfe3fccf2e51520529e6c/d2e8d/01-cover-00.jpg 250w,
/static/14b49be9f15dfe3fccf2e51520529e6c/55b1d/01-cover-00.jpg 500w,
/static/14b49be9f15dfe3fccf2e51520529e6c/9aebb/01-cover-00.jpg 1000w,
/static/14b49be9f15dfe3fccf2e51520529e6c/e8f68/01-cover-00.jpg 1179w" src="/static/14b49be9f15dfe3fccf2e51520529e6c/9aebb/01-cover-00.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2021/self-parking-car-evolution/"><h3 class="text-xl ">Self-Parking Car in 500 Lines of Code</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Sep 28, 2021</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>15<!-- --> min to read</div></div><div class="font-light">Training the car to do self-parking using a genetic algorithm</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2021/binary-floating-point/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEBv/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAc/TMwoB/8QAGBAAAwEBAAAAAAAAAAAAAAAAAQIQAAP/2gAIAQEAAQUC3RAqQz//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAACAwAAAAAAAAAAAAAAAAAAAQIgQf/aAAgBAQAGPwIi9df/xAAYEAEAAwEAAAAAAAAAAAAAAAABEBFhAP/aAAgBAQABPyHrUYZKWrVj/9oADAMBAAIAAwAAABCAD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAQACAQUAAAAAAAAAAAAAAAEQESEAQVGBof/aAAgBAQABPxALQ50Vt826Pkn4Rgtuo//Z" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/8e4f905a6b572efb5ada8bdbeda6dff6/d2e8d/01-cover-02.jpg 250w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/55b1d/01-cover-02.jpg 500w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/9aebb/01-cover-02.jpg 1000w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/e4ddd/01-cover-02.jpg 1500w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/276ce/01-cover-02.jpg 1920w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/8e4f905a6b572efb5ada8bdbeda6dff6/d2e8d/01-cover-02.jpg 250w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/55b1d/01-cover-02.jpg 500w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/9aebb/01-cover-02.jpg 1000w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/e4ddd/01-cover-02.jpg 1500w,
/static/8e4f905a6b572efb5ada8bdbeda6dff6/276ce/01-cover-02.jpg 1920w" src="/static/8e4f905a6b572efb5ada8bdbeda6dff6/9aebb/01-cover-02.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2021/binary-floating-point/"><h3 class="text-xl ">Binary representation of the floating-point numbers</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jul 16, 2021</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>3<!-- --> min to read</div></div><div class="font-light">Anti-intuitive but yet interactive example of how the floating-point numbers like -27.156 are stored in binary format in a computer's memory</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2021/content-aware-image-resizing-in-javascript/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:47.199999999999996%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQCA//EABYBAQEBAAAAAAAAAAAAAAAAAAECA//aAAwDAQACEAMQAAAB7qdVjEsJ/8QAGRAAAgMBAAAAAAAAAAAAAAAAAAECEBIx/9oACAEBAAEFAsGBwFyv/8QAFhEAAwAAAAAAAAAAAAAAAAAAAAET/9oACAEDAQE/AZokj//EABURAQEAAAAAAAAAAAAAAAAAAAAS/9oACAECAQE/AaU//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAHBAAAQMFAAAAAAAAAAAAAAAAAAExQSFRYaHR/9oACAEBAAE/IWUhCa30M4GDhKn/2gAMAwEAAgADAAAAEP8AD//EABURAQEAAAAAAAAAAAAAAAAAAAAB/9oACAEDAQE/EHX/AP/EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/EKW//8QAHRAAAgICAwEAAAAAAAAAAAAAAREAITFBcaHB8P/aAAgBAQABPxBxRWR7PxhGxjMvCa4loIsEZ2vBDgcoewz/2Q==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/614863d4b0f1b51f0e2211589e973aa5/d2e8d/01-cover-02.jpg 250w,
/static/614863d4b0f1b51f0e2211589e973aa5/55b1d/01-cover-02.jpg 500w,
/static/614863d4b0f1b51f0e2211589e973aa5/9aebb/01-cover-02.jpg 1000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/614863d4b0f1b51f0e2211589e973aa5/d2e8d/01-cover-02.jpg 250w,
/static/614863d4b0f1b51f0e2211589e973aa5/55b1d/01-cover-02.jpg 500w,
/static/614863d4b0f1b51f0e2211589e973aa5/9aebb/01-cover-02.jpg 1000w" src="/static/614863d4b0f1b51f0e2211589e973aa5/9aebb/01-cover-02.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2021/content-aware-image-resizing-in-javascript/"><h3 class="text-xl ">Content-aware image resizing in JavaScript</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Apr 16, 2021</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>11<!-- --> min to read</div></div><div class="font-light">JavaScript implementation of so-called Seam Carving algorithm for the content-aware image resizing and objects removal. Dynamic programming approach is applied to optimize the resizing time.</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2021/gyro-web/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:29.599999999999998%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAGABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAd0RRX//xAAVEAEBAAAAAAAAAAAAAAAAAAAAIf/aAAgBAQABBQJVf//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAABD/2gAIAQEABj8Cf//EABkQAAMAAwAAAAAAAAAAAAAAAAABESExUf/aAAgBAQABPyFWk6FhtH//2gAMAwEAAgADAAAAEAwP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGhABAAMAAwAAAAAAAAAAAAAAAQARITFBcf/aAAgBAQABPxBNl5NGiZzXcAA2eT//2Q==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/8248abb946ae6143ba9a719ea0612031/d2e8d/01-cover.jpg 250w,
/static/8248abb946ae6143ba9a719ea0612031/55b1d/01-cover.jpg 500w,
/static/8248abb946ae6143ba9a719ea0612031/cd8c4/01-cover.jpg 862w" sizes="(max-width: 862px) 100vw, 862px" /><img loading="lazy" sizes="(max-width: 862px) 100vw, 862px" srcset="/static/8248abb946ae6143ba9a719ea0612031/d2e8d/01-cover.jpg 250w,
/static/8248abb946ae6143ba9a719ea0612031/55b1d/01-cover.jpg 500w,
/static/8248abb946ae6143ba9a719ea0612031/cd8c4/01-cover.jpg 862w" src="/static/8248abb946ae6143ba9a719ea0612031/cd8c4/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2021/gyro-web/"><h3 class="text-xl ">Gyro-web: Accessing the device orientation in JavaScript</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Mar 2, 2021</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">Accessing the device orientation using React hook, and rotating a CSS 3D cube afterwards</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2020/top-33-javascript-projects-on-github-december/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACWElEQVQozx2S20sUUQCH598opMxw72fOOXPO7OxldtwV3J3dnHPGELKLFIJRGuQFSkvo7kNIKNSLBfVSCoYUpA9CWohhF8iERV3X1S3dpLRFS5e8YGyvP/jg++AnXG3SrHZRURAAsKrS01inloYohFCWscUqXmnS4qMGJZhSBCFU/aThvHrqmBchJMtE6LgZOlAICovAxXOB1RmeS/PPw0c8iiRJyOmCxys9U2OG30cOHnJRKr19Gdtc4JsLZmujZndiITNpdNwK3WkLLk6w3QzfyZiJccPrJYSgYotYU+3bXqoY6tMvNwQGe/Xd72YuzfeWj95o0Wx2LKyn2PaSubWYXwd79bZmrcJQIESShDSVDvXp63NsLck2FsyNeZ76aNy7HaqvVWWKKSVCNsFWpoxfM8bPKRbU5P0FTlGElOad62sD2Vnzyf1QV3vJg7vBh53BhrrAvgJgtYoYw3zzWpL9/cZzabaW5J3tpdGwW1EkhPK8xSo2X9AmRmJfRqLx0ejkm+jrfv30CV9Qowj9h1em+UBPZGwgtjHP/6T4yjR7NxALqAThvDkheP4Tmx0vf/VU/xFnW4t8dZotx3lrk+YCWGhtLLHZIcbScH90J8N/p9jmV5OXKy4AMUY+r/SoK1wakosOi/Vn1VzazCaMvWzFs+4ym0MSPB5KCHI4xKpKz9wHY3WGPX8cIQRLEnIBGI3I11tCFhuUZeQCqKc7nE2w5HvjzEkfELFQU+13OEWZIiDCgEoiZTLGKP8Bioqt4rVLJSMvYkBEhCCMEZawHnb7fQQA6HaTfxSX76bLYhW/AAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/0e2c24e63dcd50666afb37c265b4e70d/bd3a8/01-cover-01.png 250w,
/static/0e2c24e63dcd50666afb37c265b4e70d/0757b/01-cover-01.png 500w,
/static/0e2c24e63dcd50666afb37c265b4e70d/eb0de/01-cover-01.png 1000w,
/static/0e2c24e63dcd50666afb37c265b4e70d/37d21/01-cover-01.png 1280w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/0e2c24e63dcd50666afb37c265b4e70d/bd3a8/01-cover-01.png 250w,
/static/0e2c24e63dcd50666afb37c265b4e70d/0757b/01-cover-01.png 500w,
/static/0e2c24e63dcd50666afb37c265b4e70d/eb0de/01-cover-01.png 1000w,
/static/0e2c24e63dcd50666afb37c265b4e70d/37d21/01-cover-01.png 1280w" src="/static/0e2c24e63dcd50666afb37c265b4e70d/eb0de/01-cover-01.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2020/top-33-javascript-projects-on-github-december/"><h3 class="text-xl ">Top 33 JavaScript Projects on GitHub (December 2020)</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Dec 10, 2020</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">Snapshot of 33 most starred open-sourced JavaScript repositories on GitHub as of December</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2020/printed-links-detection/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACAUlEQVQoz32RzYsScRzGf+vPFwoJBEHw7CgizKj/gYInEUE8iniqFJdldakg1kN1MGKvstui4KGLaeDa4sKMsaQmSjRGmi876jjOjC/rju30D5Rrp416zs+H5/l+HwD+kkQiAQBgGJZKpWq1WrPZ7Ha7FEW1222SJIvFYiKRCAQCcrl87d660S3YaDSm0+ler9fpdFiWnU6nHMcxDEOSZD6fD4fDUqn0diyEUKFQAAAsFksmk6FpmmVZURQFQbi+Fq+uVoIgDAbDWCy2sQGVSqXVanU6nVqtdrvdfr8fAGAymQiCEARhsZiLorhcXq5Wy5/ij/mcn025eDyuVCrXMIqiLpfL5/M5HA6bzeZ0Ojc3FwqF2WzGMGN+esnS9SG53/8ca3160q0/fvniwZ2798CmYTAY9Hg8TqfT6/Xa7fZNcjabnUyY0XDAMBOepTi6MqY+9tt4izzdfxrZksA1rNForFar2WzGMAxFUQRBAAAIgiSTyfb3ixHN02N+RE8n3GpIL75+o8rlxu5uFEL4570QQsmNIIQymQwAoNfrDw5e9VvvJxTODUs8/YEdEpMBcdF6R5y9CW/vSKUQ/GtnBNE/fxarnu2cnzxslKKNUuTL+aM6Hqmc3j95Gw9vR/8HGwyG6N7e4eFRLpcrl8uVSqVareI4ns3mXh8fh0Kh3zv/An2o+RW7ytJnAAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/55a94699f1c16ff59258cbb490d497eb/bd3a8/01-cover.png 250w,
/static/55a94699f1c16ff59258cbb490d497eb/0757b/01-cover.png 500w,
/static/55a94699f1c16ff59258cbb490d497eb/eb0de/01-cover.png 1000w,
/static/55a94699f1c16ff59258cbb490d497eb/37d21/01-cover.png 1280w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/55a94699f1c16ff59258cbb490d497eb/bd3a8/01-cover.png 250w,
/static/55a94699f1c16ff59258cbb490d497eb/0757b/01-cover.png 500w,
/static/55a94699f1c16ff59258cbb490d497eb/eb0de/01-cover.png 1000w,
/static/55a94699f1c16ff59258cbb490d497eb/37d21/01-cover.png 1280w" src="/static/55a94699f1c16ff59258cbb490d497eb/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2020/printed-links-detection/"><h3 class="text-xl ">Making the Printed Links Clickable Using TensorFlow 2 Object Detection API</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Dec 1, 2020</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>22<!-- --> min to read</div></div><div class="font-light">In this article we will start solving the issue of making the printed links (i.e. in a book or in a magazine) clickable via your smartphone camera</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2020/recipes-generation/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:66.8%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBP/EABYBAQEBAAAAAAAAAAAAAAAAAAMAAf/aAAwDAQACEAMQAAABq8rmuYcy/8QAHBAAAwABBQAAAAAAAAAAAAAAAAECAxESISIx/9oACAEBAAEFAq1kUuVxRiXfa0eH/8QAFREBAQAAAAAAAAAAAAAAAAAAERD/2gAIAQMBAT8BSf/EABcRAAMBAAAAAAAAAAAAAAAAAAABESH/2gAIAQIBAT8Bl0qP/8QAGhABAQACAwAAAAAAAAAAAAAAAQACERAhYf/aAAgBAQAGPwKyRV9tjw7yW6v/xAAcEAEAAwACAwAAAAAAAAAAAAABABEhMWFBUbH/2gAIAQEAAT8hDGelr5HJLg8ItXI6gWW1lXQZXUzAoJ//2gAMAwEAAgADAAAAEAAf/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQEQ/9oACAEDAQE/EKBn/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERMf/aAAgBAgEBPxBYB0P/xAAcEAEAAwEBAQEBAAAAAAAAAAABESExAEFRYXH/2gAIAQEAAT8Qmk1IZF6vn94e5yOvUdIKAFKX71lyQs6ZZ7nCC1LBLCPz70GZAE53/9k=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/05340351fcb1004d0e25300d243978cd/d2e8d/01-cover.jpg 250w,
/static/05340351fcb1004d0e25300d243978cd/55b1d/01-cover.jpg 500w,
/static/05340351fcb1004d0e25300d243978cd/e7ab0/01-cover.jpg 940w" sizes="(max-width: 940px) 100vw, 940px" /><img loading="lazy" sizes="(max-width: 940px) 100vw, 940px" srcset="/static/05340351fcb1004d0e25300d243978cd/d2e8d/01-cover.jpg 250w,
/static/05340351fcb1004d0e25300d243978cd/55b1d/01-cover.jpg 500w,
/static/05340351fcb1004d0e25300d243978cd/e7ab0/01-cover.jpg 940w" src="/static/05340351fcb1004d0e25300d243978cd/e7ab0/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2020/recipes-generation/"><h3 class="text-xl ">Generating cooking recipes using TensorFlow and LSTM Recurrent Neural Network: A step-by-step guide</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 18, 2020</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>13<!-- --> min to read</div></div><div class="font-light">I've trained a character-level LSTM RNN on ~100k recipes dataset using TensorFlow, and it suggested me to cook Cream Soda with Onions, Puff Pastry Strawberry Soup, Zucchini flavor Tea and Salmon Mousse of Beef and Stilton Salad with Jalapenos</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2020/this-is-how-social-media-could-ruin-your-happiness/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:64.39999999999999%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACP0lEQVQ4y1WTS2/UMBSF52fzA/gnSCzQsIFVH0jtpggJREFdgOhjpkVDm2ScpxM/rv2BnZm2JLJkn9jn3Ht8sgDw3lOrmhhjHulx1tLUNTzDvHe0bfMfpqeJqqoIIeT1IoNGWG8qnJcMRuuwtaK6XSNdSxSf8WB7mmJN9IYw84GxXN+sCCJPhP1WUdwVpD1xp6TWG9pNCd1ING6uUEwWjcx7CjuxLO/oABueEZ69/8rp62PayhCZpY+XR5y+OYTRI6kc3XH54ZAfy1ew/gmjZuMMb+9vuL79ReXtTJiOH7y74OWLE35d9IQ4qx8sj/h+9o3UW0K8WmFuP+NX54j6Dd7RR+Fqqzj5+IVlsX6qMHhBlRo9yaO5WjW4fgSJJMbgNdEPc8sxeRqxUVgPmk/FlvOumglVU9I0NT4aJtHZH1WXdF2LF4sRm7G6VdTp1k1P3PlVNxWDUsn4+TJjZFEUV9ytbgi6IYT5Nh/uL7lbr3BaYZzOvpbFJeX9H8KgEDfmfQkrHu6ZhpLRznYtprFHbUuwPXGnNOmEbTPGrpqqfKDve6wfGe2QRaqyYBh6xHa4hKUK5zAHwjgR/S5vaZ0aNYa4y5cEwac8Opczl/Y4cYh3xMmwCweLECR/CN4RpglCwPgJcZZoDBI8k9M4sYRxxI5D/p4Ik5fS90RrnzycA+uw6UBqOUZ88DngSSzP05uqEo8NFhHBGIMeBrTWWOcef8XFfrIn3recWtyPvXoiT2TDMNC2LV3X5ZHmU+ruH+FfRoftu8AeVjwAAAAASUVORK5CYII=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/b298350cb76abdf906bf1946ba77652e/bd3a8/01-cover-02.png 250w,
/static/b298350cb76abdf906bf1946ba77652e/0757b/01-cover-02.png 500w,
/static/b298350cb76abdf906bf1946ba77652e/eb0de/01-cover-02.png 1000w,
/static/b298350cb76abdf906bf1946ba77652e/3c6b4/01-cover-02.png 1500w,
/static/b298350cb76abdf906bf1946ba77652e/63e34/01-cover-02.png 1867w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/b298350cb76abdf906bf1946ba77652e/bd3a8/01-cover-02.png 250w,
/static/b298350cb76abdf906bf1946ba77652e/0757b/01-cover-02.png 500w,
/static/b298350cb76abdf906bf1946ba77652e/eb0de/01-cover-02.png 1000w,
/static/b298350cb76abdf906bf1946ba77652e/3c6b4/01-cover-02.png 1500w,
/static/b298350cb76abdf906bf1946ba77652e/63e34/01-cover-02.png 1867w" src="/static/b298350cb76abdf906bf1946ba77652e/eb0de/01-cover-02.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2020/this-is-how-social-media-could-ruin-your-happiness/"><h3 class="text-xl ">This is how social media could ruin your happiness</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 11, 2020</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">The recipe for how you can ruin your happiness and start feeling miserable using social media</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2020/machine-learning-experiments/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACJUlEQVQozyXL3W6aUAAA4OMP8ice6KooIpwKVEBORQSkuGRLSHczwcaurbONbU2rxjTpetWXWbJkV8uyV1iW7GY3fagl7Xf/gSAIfN8PXriuy3Ecy7Icx9EMw0PoHXR7HS30vMB1sd1FSG2r6p4qqa0aakngtfm+H0VRHMflcpllWZIkS6VSheOcfR13jEGv17dsx+xoOtJ11Go1EZL19h4IX7iue3Nzs1wuCYIQRVFRFFEUG43623Dw/nAYB+EAY9extbZiGGhPlVFbNVEVBGEYhGHf8zabzXq9zufzYRguFos0TbMsfbzf3q9X69Wds2/sa22lXlfkpqHIpq4ZqggCf+B7XjQcHk+yLB1DCJMkWa1Wo9Ho/Oz04uT4ZDKeZunVbDY/Pz05zuazme8eNGu7Uq0KejZqtCtJNvr188f3b18nk8l0Ov3y8PB5Pr++WoyPkneH/uXZ5PJsOuz3NE2L4xhjDADI5XJA1QWqDrLFh+fnf3///L69u0uSZLvdPj09rW5vp+nH64tPj9vrzfJil2NejyRJNE0DAMCbOsmLJGxQfI2SBBZjB2NsWdYwinDXZkrFJk9EVt2QeZ4mWnKrUqkIglCtViGEYEcg2TJFEwW6mId0EWNsmqZhGLZt22ZnF7KGUjMlRt4hIUkoisLzPACAYRiKokC1XBToAs8UODIHacLr903T1DTNsizbtlmaxE7X6SADNTmSEASBIAgAQOHFf9TSaU5dVh82AAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/3c14e781aa2f97061b54d8177f6802b5/bd3a8/01-cover.png 250w,
/static/3c14e781aa2f97061b54d8177f6802b5/0757b/01-cover.png 500w,
/static/3c14e781aa2f97061b54d8177f6802b5/eb0de/01-cover.png 1000w,
/static/3c14e781aa2f97061b54d8177f6802b5/3c6b4/01-cover.png 1500w,
/static/3c14e781aa2f97061b54d8177f6802b5/63177/01-cover.png 1800w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/3c14e781aa2f97061b54d8177f6802b5/bd3a8/01-cover.png 250w,
/static/3c14e781aa2f97061b54d8177f6802b5/0757b/01-cover.png 500w,
/static/3c14e781aa2f97061b54d8177f6802b5/eb0de/01-cover.png 1000w,
/static/3c14e781aa2f97061b54d8177f6802b5/3c6b4/01-cover.png 1500w,
/static/3c14e781aa2f97061b54d8177f6802b5/63177/01-cover.png 1800w" src="/static/3c14e781aa2f97061b54d8177f6802b5/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2020/machine-learning-experiments/"><h3 class="text-xl ">Interactive Machine Learning Experiments</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>May 5, 2020</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>6<!-- --> min to read</div></div><div class="font-light">Recognize digits and sketches. Detect objects. Classify images. Write a Shakespeare poem. All with TensorFlow 2 models demo.</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2020/coronavirus-covid-19-dashboard/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:52%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMklEQVQoz42RX08TURBH+0F4RAyEAJHAt6KBNhb12Wj8FsYX4wuJfxISYwwgiReClm1RVCAFRaClu3v33r3dpXfaY1rig/riJL+XmZOTyUzBd36q1llVufN15S42lTt9pdpfHqu+3lFNF6m1xr56f/JRbf/YVevft9Tq8bo61A3VOW2p71ufVbhTVcnmljJvNlT29UgVfHbO6Y8Ad7GBa++QNp7R/PAQtOIyS9hsHLJ98pEPp3VWG2s82V/hW3pCp6k5Ul+IqwHx6zWipytk+wcUfDcX8EIWS//wrTjdFuMySeJI2jqWd80zOY4isSYRrbVYY8XvfpV8/0iM0RKHkXSyjgDS7/WlYIwlMSm9bgbdmL/LAv2/m5kH3/uHFREKSZKQaI0X4f6DRxSLRUqlEouLiywtLVEqFrmzvMzde/eoLFcol8uUKrdZKpepVCpDdmFhgd1qdSgtxHHMQHqV58zPzzF24wbj4+PM3rrFxMQEYzdvMjk5yfT0NDMzM4yOjjI9NTWcz87OMj83x8jICM9fvLwWWmvRWtPr9Tg4OCAIAur1+h+pBQFBrUYQ1KjX96gNsvfpOvW9IZNcnoELKTjnMMYMhf9fA9YPrgbkIBZyy5X318LBhv3+4Nc95He8p+e7SCdBXITYFl3ToutCui7GpBGxCQlTTTPr0MqvaOc5Be89qbX43HHlNB2nSU2Iic6w4U9MeIGJLtHa0ApjWpGmFWpibTFJiktSxDrEpohJ+QWBzbUy7IW70wAAAABJRU5ErkJggg==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/0b1e786ce0ff8243fab1a7616c803aee/bd3a8/01-cover.png 250w,
/static/0b1e786ce0ff8243fab1a7616c803aee/0757b/01-cover.png 500w,
/static/0b1e786ce0ff8243fab1a7616c803aee/eb0de/01-cover.png 1000w,
/static/0b1e786ce0ff8243fab1a7616c803aee/8f0de/01-cover.png 1208w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/0b1e786ce0ff8243fab1a7616c803aee/bd3a8/01-cover.png 250w,
/static/0b1e786ce0ff8243fab1a7616c803aee/0757b/01-cover.png 500w,
/static/0b1e786ce0ff8243fab1a7616c803aee/eb0de/01-cover.png 1000w,
/static/0b1e786ce0ff8243fab1a7616c803aee/8f0de/01-cover.png 1208w" src="/static/0b1e786ce0ff8243fab1a7616c803aee/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2020/coronavirus-covid-19-dashboard/"><h3 class="text-xl ">I’ve open-sourced a simple Coronavirus (COVID-19) dashboard</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Mar 23, 2020</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">Coronavirus (COVID-19) dashboard to show the dynamics of Сoronavirus distribution per country</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2020/state-of-the-art-shitcode-principles/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAABNklEQVQoz2P4/4yHbMSAS+LfU3T0H87Arvk57/+XvP+fg9lvYOgVz//XSIyXIFNQNP97yvv/LefdnVJ7Jyv8f8H+5wnvxT1c1w5y3TnG9ew8962jXNcOcr68xHX3ONfLS9z/X0Lth9vM/f8F39JW57IAl7tH1f6/ZD+2mevwBs6D6zhPbeO6uJfr6EbOsztB3Mdnuf6/QtIMtpbr8jqZvrzMvtKKGYU2H69x9NSzT2xmXzCRfW4f+4Z5HBMa2ef1cdQWsJ3ZwfX/Hc/fJwjNIC+dXyO6tVf98HyL1Q2iH6/x3TvJ9fA015srPO+ucT89z33/JPfDMyD3v7qCxdk8/19z/3/D+f852/+33P9fgMPmFTh4IOgVJMDAIYoU2twQ9O8pN8Q8MAOKIOLIJIQBQQz/nwuTjQBxyHAbymi0iAAAAABJRU5ErkJggg==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/95368cd07c6433c2c84d2ce2731af134/bd3a8/01-cover.png 250w,
/static/95368cd07c6433c2c84d2ce2731af134/0757b/01-cover.png 500w,
/static/95368cd07c6433c2c84d2ce2731af134/eb0de/01-cover.png 1000w,
/static/95368cd07c6433c2c84d2ce2731af134/37d21/01-cover.png 1280w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/95368cd07c6433c2c84d2ce2731af134/bd3a8/01-cover.png 250w,
/static/95368cd07c6433c2c84d2ce2731af134/0757b/01-cover.png 500w,
/static/95368cd07c6433c2c84d2ce2731af134/eb0de/01-cover.png 1000w,
/static/95368cd07c6433c2c84d2ce2731af134/37d21/01-cover.png 1280w" src="/static/95368cd07c6433c2c84d2ce2731af134/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2020/state-of-the-art-shitcode-principles/"><h3 class="text-xl ">State-of-the-Art Shitcode Principles</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jan 28, 2020</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">This a list of state-of-the-art shitcode principles your project should follow.</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2019/nano-neuron/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:75.2%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB80lEQVQoz4VSy6t5URjdKfxFZEyZeAwNDEmKISMlyUApA2XoUSgDz3TIoyRCEgOEgbw6JR0dr2OAc3y/7t03/bpdfKPd/vZa69vfWgg+FcdxALDdbsvl8mQyAYDHdwEAeo9kWXY0Gg2Hw/V6bTAYfD4fSZJPxpdgzE1RVCQScTqdDMOkUqnxeAwA0+m0WCzudrt3yhjf7Xbj8bjdbheLxblcDgA8Hk84HO50Oh/G3u/3DMMAgEwmQwgJhUK9Xh+NRhuNBk3TCNP/qckwTKFQIAgiFovx+XyBQIAQslqtAHA+n6/XK3ozMMMw6XTa7/cTBKFUKhFCPB7P4XCkUqlEIvH1Z5IkT6fT/wbgM8uyAHA6nTabDV67Vqs1Go0AkMlkvF5vq9VCi8WiXq/f73cMu91u1+v11wj4JplMBgIBADgej61Wa71eo8FgUKvV8vk8y7KhUEgkEqlUKoVCYbFYsObj8cCuqtVqt9sNAE8ldLlcxuNxt9sNBoPZbLZUKs3n83Q6rdPp5HK5RqMhCKJSqdhsNolEst1ucUJ+EjabzSiKomm62Ww+o4N7y+XS5XKZTCapVGo2mw+Hw7P1o8xxXLVa7ff77Xb7fr/jtXHf9TH2X1aRJLlarRqNxu12+2UYy7KY5U8uhBfQbDZ7vd6rR6+U/wHkKwbN2LwJjQAAAABJRU5ErkJggg==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/8c920df1600d388655fe4289a999c280/bd3a8/01-cover.png 250w,
/static/8c920df1600d388655fe4289a999c280/0757b/01-cover.png 500w,
/static/8c920df1600d388655fe4289a999c280/e1957/01-cover.png 720w" sizes="(max-width: 720px) 100vw, 720px" /><img loading="lazy" sizes="(max-width: 720px) 100vw, 720px" srcset="/static/8c920df1600d388655fe4289a999c280/bd3a8/01-cover.png 250w,
/static/8c920df1600d388655fe4289a999c280/0757b/01-cover.png 500w,
/static/8c920df1600d388655fe4289a999c280/e1957/01-cover.png 720w" src="/static/8c920df1600d388655fe4289a999c280/e1957/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2019/nano-neuron/"><h3 class="text-xl ">NanoNeuron - 7 simple JS functions that explain how machines learn</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Dec 6, 2019</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>8<!-- --> min to read</div></div><div class="font-light">The NanoNeuron.js code example contains 7 simple JavaScript functions (which touches on model prediction, cost calculation, forward/backwards propagation, and training) that will give you a feeling of how machines can actually learn. No 3rd-party libraries, no external data-sets or dependencies, only pure and simple JavaScript functions.</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2019/react-useposition-hook/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:45.599999999999994%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAbod1hBw/8QAGxAAAQQDAAAAAAAAAAAAAAAAAQACAxIEEEL/2gAIAQEAAQUCpSduNJImEFnWv//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABsQAQEAAgMBAAAAAAAAAAAAAAECACERIDGR/9oACAEBAAY/Ak3Teznwxu7Rl+4M+dP/xAAbEAEAAgIDAAAAAAAAAAAAAAABADERIRBxgf/aAAgBAQABPyEGDIX28pkKyILS2W4DUa9PBP/aAAwDAQACAAMAAAAQEA//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAfEAEAAgIABwAAAAAAAAAAAAABACERQRAxUWFxgfD/2gAIAQEAAT8QWNhQJp0wpfeZKUgQKjLQ3GWXnIjj3PndTht5n//Z" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/b2e801b0c809c1b2059b4e0d712a71b1/d2e8d/01-cover.jpg 250w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/55b1d/01-cover.jpg 500w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/9aebb/01-cover.jpg 1000w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/e4ddd/01-cover.jpg 1500w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/cd117/01-cover.jpg 1800w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/b2e801b0c809c1b2059b4e0d712a71b1/d2e8d/01-cover.jpg 250w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/55b1d/01-cover.jpg 500w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/9aebb/01-cover.jpg 1000w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/e4ddd/01-cover.jpg 1500w,
/static/b2e801b0c809c1b2059b4e0d712a71b1/cd117/01-cover.jpg 1800w" src="/static/b2e801b0c809c1b2059b4e0d712a71b1/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2019/react-useposition-hook/"><h3 class="text-xl ">Creating React usePosition() hook for getting browser's geolocation</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 30, 2019</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">Decoupling of geolocation logic into React hook</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2019/technical-interview-preparation-checklist/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:21.2%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAwklEQVQI102OwVbDIBBF8/+/5UIXurBS9ZwWkwnBGCFtYyDAwDCe1o33vMV9u9vwDSJKmBAxYSIiZr6+2zJmZo4pfk7jR9ea2RYqXCszN845RPTOKxi00goGt3pEnOzU6x4GsGdbMi3evvWPz4eH47iLOXi/WWsbKaUxZl2c3IN8heO++7msIYThrAQIAS/f61cIyS/j1N7D+51VTxjdPJ+01k3OmYhqrfSPWmsp5c9zvmafzOWwa6XopOhiSIXKtm2/0DThFurMDtAAAAAASUVORK5CYII=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/feabdd752148451ef943de015efee4c2/bd3a8/01-cover.png 250w,
/static/feabdd752148451ef943de015efee4c2/0757b/01-cover.png 500w,
/static/feabdd752148451ef943de015efee4c2/eb0de/01-cover.png 1000w,
/static/feabdd752148451ef943de015efee4c2/3c6b4/01-cover.png 1500w,
/static/feabdd752148451ef943de015efee4c2/950cd/01-cover.png 2000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/feabdd752148451ef943de015efee4c2/bd3a8/01-cover.png 250w,
/static/feabdd752148451ef943de015efee4c2/0757b/01-cover.png 500w,
/static/feabdd752148451ef943de015efee4c2/eb0de/01-cover.png 1000w,
/static/feabdd752148451ef943de015efee4c2/3c6b4/01-cover.png 1500w,
/static/feabdd752148451ef943de015efee4c2/950cd/01-cover.png 2000w" src="/static/feabdd752148451ef943de015efee4c2/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2019/technical-interview-preparation-checklist/"><h3 class="text-xl ">Technical Interview Preparation Checklist</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>May 7, 2019</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>18<!-- --> min to read</div></div><div class="font-light">Useful insights from recruiters that they normally send to applicants before the technical interviews</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2019/most-trending-jupyter-notebooks-of-december/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMCBAb/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABVdm1MsLF/8QAHBAAAgICAwAAAAAAAAAAAAAAAQMCEgQFJDIz/9oACAEBAAEFAsKRoGLq4GLteOKj0n3/AP/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EACAQAAICAQMFAAAAAAAAAAAAAAECABEhAxIxUVJhcYH/2gAIAQEABj8C7VBy3WUpKbmxQjhjZvmfZreHxG9z/8QAGxABAAICAwAAAAAAAAAAAAAAAQARITFRgbH/2gAIAQEAAT8hKtX/AJJebTJUwFXygIsHOEQQToYjVltVP//aAAwDAQACAAMAAAAQTM//xAAWEQADAAAAAAAAAAAAAAAAAAAQESH/2gAIAQMBAT8QrH//xAAVEQEBAAAAAAAAAAAAAAAAAAAQIf/aAAgBAgEBPxCH/8QAGxABAQADAQEBAAAAAAAAAAAAAREAITFBUYH/2gAIAQEAAT8Qk7aZnHV7rw+4Sp0Fj4b5+YcfyVV7geZXZd3L7hhKONnzFTIFWrvP/9k=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/b629f73837de754a0f87aabad40526a1/d2e8d/01-cover.jpg 250w,
/static/b629f73837de754a0f87aabad40526a1/55b1d/01-cover.jpg 500w,
/static/b629f73837de754a0f87aabad40526a1/9aebb/01-cover.jpg 1000w,
/static/b629f73837de754a0f87aabad40526a1/e4ddd/01-cover.jpg 1500w,
/static/b629f73837de754a0f87aabad40526a1/276ce/01-cover.jpg 1920w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/b629f73837de754a0f87aabad40526a1/d2e8d/01-cover.jpg 250w,
/static/b629f73837de754a0f87aabad40526a1/55b1d/01-cover.jpg 500w,
/static/b629f73837de754a0f87aabad40526a1/9aebb/01-cover.jpg 1000w,
/static/b629f73837de754a0f87aabad40526a1/e4ddd/01-cover.jpg 1500w,
/static/b629f73837de754a0f87aabad40526a1/276ce/01-cover.jpg 1920w" src="/static/b629f73837de754a0f87aabad40526a1/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2019/most-trending-jupyter-notebooks-of-december/"><h3 class="text-xl ">Most Trending Jupyter Notebooks of December on GitHub</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jan 1, 2019</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">A list of 25 most trending Jupyter Notebooks on GitHub as for December, 2018</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/homemade-machine-learning-in-python/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:69.60000000000001%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAAsTAAALEwEAmpwYAAACDUlEQVQoz12S2W4UQQxF5/8/hR/gKUKI5QGIiKKErJBkptP71F7l2myj7pkRCvfR5eOyr72hkxArM+dVzlnn7BpEY8w8y66ftDY5lwCAq4hog4jDOAbITdPFGJumkVLmgnuhjDHe+3Ecot1Z+Ry8A/D7qQfwSqlSyua1bbWazXwX9AsSCWWdM3a+D/qZmQGiUhLsa3QtEXq9le1FAqmULiVvtNalxOS7EgUmo7v7ZKfohgLTMkUpEHwQr3baLr1WKDAZNfXD4L3b8EFEyJxU+/TjfVItrSE+vbW/PnU3Xwgr+GnYnjvdCaH6vj/BfEw/eMFM3gYjLVY82LbWJ8Icgg3BHw07RGOMiKi1iTEtqcRX57dfz76Bjwdvea0b9e9sHpjRedBaL3CMUUgpmtuXizPQAxLXWkqpKeVaa0Wq0XY3n3VzxcwpjKAfY5DehwUOIUzzrKfd+OeyRktrLzkDeMuEREw1mu4BxK7WWGCMtrFGEPPmcBjW2lxqJUakUgoRbi8/XH98V0EtP6/3g0RBPob9TckwjFNKcXNyirEE0d953TNzKbWkmMAvhZhrNm7/wNUqvZzNPM/W2qNhTAts9dzvrkHvnNrV7IKd5bRl9MmPFbpoXrDYZQQ6tLYg/1YFEJE42Kl9+u5Nb8XLvrumJIbtz2h7frP5o97sGbFqY4TQUmmkY2oIqVZcyf/hv9BdJSTsQbG9AAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/6a4daeb4f4a615338ca192f7993816ae/bd3a8/01-cover.png 250w,
/static/6a4daeb4f4a615338ca192f7993816ae/0757b/01-cover.png 500w,
/static/6a4daeb4f4a615338ca192f7993816ae/eb0de/01-cover.png 1000w,
/static/6a4daeb4f4a615338ca192f7993816ae/3c4ef/01-cover.png 1207w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/6a4daeb4f4a615338ca192f7993816ae/bd3a8/01-cover.png 250w,
/static/6a4daeb4f4a615338ca192f7993816ae/0757b/01-cover.png 500w,
/static/6a4daeb4f4a615338ca192f7993816ae/eb0de/01-cover.png 1000w,
/static/6a4daeb4f4a615338ca192f7993816ae/3c4ef/01-cover.png 1207w" src="/static/6a4daeb4f4a615338ca192f7993816ae/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/homemade-machine-learning-in-python/"><h3 class="text-xl ">Homemade Machine Learning in Python</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Dec 21, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">MatLab/Octave examples of popular machine learning algorithms with code examples and mathematics being explained</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/machine-learning-in-matlaboctave/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:44.8%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAL/2gAMAwEAAhADEAAAAc5K5pI//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABBQJf/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAGRAAAwADAAAAAAAAAAAAAAAAAAERICFR/9oACAEBAAE/IYummRYf/9oADAMBAAIAAwAAABA03//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAQEAAQUBAAAAAAAAAAAAAAEAQRExUWGBof/aAAgBAQABPxAA1fie4htk9slzYv/Z" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/6ac6eacba7206c6931775568852a3423/d2e8d/01-cover.jpg 250w,
/static/6ac6eacba7206c6931775568852a3423/55b1d/01-cover.jpg 500w,
/static/6ac6eacba7206c6931775568852a3423/9aebb/01-cover.jpg 1000w,
/static/6ac6eacba7206c6931775568852a3423/e4ddd/01-cover.jpg 1500w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/6ac6eacba7206c6931775568852a3423/d2e8d/01-cover.jpg 250w,
/static/6ac6eacba7206c6931775568852a3423/55b1d/01-cover.jpg 500w,
/static/6ac6eacba7206c6931775568852a3423/9aebb/01-cover.jpg 1000w,
/static/6ac6eacba7206c6931775568852a3423/e4ddd/01-cover.jpg 1500w" src="/static/6ac6eacba7206c6931775568852a3423/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/machine-learning-in-matlaboctave/"><h3 class="text-xl ">Machine Learning in MatLab/Octave</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Oct 31, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">MatLab/Octave examples of popular machine learning algorithms with code examples and mathematics being explained</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/playground-and-cheatsheet-for-learning-python/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:43.199999999999996%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAArwAAAK8AFCrDSYAAABTklEQVQoz42STUsCURSG50+19E+0Clq07AdEbmoX1CaIPghctgoXBrmQaIgWkxEKljrjaBMhaiBMjpYzA9mdecILE46adOBwz9d977nnPQpAGIZEMralTtix+B8a1SiRI0TA1+g7dnnajiQIAhkbn5MNScCo6PK2yEryAPVBj3U7CdLtdrFteyY36UvA4/MrVrdSJNZPODrdAfsa23Gp1010Xcf3fQqFApqmkc/nsSyLRqMhtVarxR5RRCBY3jhkbz9JLr2JdpbAftylbrUx9ArpdJpms4mqqpRKJarVKtlsFtM0yWQyEnwMGv1CgZC7pxeM3BqvF0u07rcJvBam+UylUsbzPIrFIoZh4DgOw+GQwWBAp9Oh1+vJvOu6s6R8tG94K6cY+e/Sd93P3/n0+32EECyS2AzHDMeSgZjLcMTuv9YmDIUEmrcu0/Yi+QFBWabcmfw2dQAAAABJRU5ErkJggg==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/6999753e334bc9014bd5cf94f5de7b30/bd3a8/02-cover.png 250w,
/static/6999753e334bc9014bd5cf94f5de7b30/0757b/02-cover.png 500w,
/static/6999753e334bc9014bd5cf94f5de7b30/15e5c/02-cover.png 750w" sizes="(max-width: 750px) 100vw, 750px" /><img loading="lazy" sizes="(max-width: 750px) 100vw, 750px" srcset="/static/6999753e334bc9014bd5cf94f5de7b30/bd3a8/02-cover.png 250w,
/static/6999753e334bc9014bd5cf94f5de7b30/0757b/02-cover.png 500w,
/static/6999753e334bc9014bd5cf94f5de7b30/15e5c/02-cover.png 750w" src="/static/6999753e334bc9014bd5cf94f5de7b30/15e5c/02-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/playground-and-cheatsheet-for-learning-python/"><h3 class="text-xl ">New Playground and Cheatsheet for Learning Python</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Aug 29, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">Collection of Python scripts that are split by topics and contain code examples with explanations, different use cases</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/top-33-javascript-projects-on-github-august-2018/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:50%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACVklEQVQozx2S20sUUQCH5++QLia59zPnnDlndvYyOzoL7q2dc8YQMkwQwW5KpkJpCd19kkgKAgkSihSMyAd98EGJMOwCmSCu67q6pZuRtmjpkheM7fUHH3wf/ITrrZrVLioKAgBWV3laLqpBnUIIZRlbrOK1Vm3mrUEJphRBCFU/uXxBPXPKixCSZSJ039aPFIPiEtB8PrA+x/MZ/nnshEeRJAk5XfB0lWd2wvD7yNFjLkqlN0Ox7SW+vWR2tGh2Jxay00b3Hf1eZ/nyFNvP8r2smZw0vF5CCCq1iPW1vt2VytHByNXmwMhAZP+7mc/wg9WTt9o1mx0Lm2m2u2LuLBfWkYFIZ5tWaSgQIklCmkpHByObC2wzxbYWzXyGpT/G79/VGxtUmWJKiZBLsrVZ49ec8XOWlWty0SGnKEJKC86NDYHcvNn3UO/pKut7FHz+OHjpXKDoMLBaRYxhoXkjxf5+4/kM20jxB13BaMitKBJCBd5iFduatKnx2Jfx6Mp0PDERGx2M1NX4yzWK0H94LcGH+8MTw7GtRf4nzdcS7N1wLKAShAvmhODFT2x+Mj70LPxjhu8s8/UEW53hHa2aC2Cho6XMZocYS2OvontZ/jvNtr+aPK64AMQY+bzSk55QUJdLjotNZ9V8xswljYNc5YveCptDEjweSghyOMTqKs/CB2N9jr18GiYESxJyARgNyzfbdYsNyjJyAdTfG8olWeq9UVfjAyIW6mv9DqcoUwREGFBJuELGGBU+QFGpVbxxpWz8dQyIiBCEMcISjoTcfh8BALrd5B9tWe/zUyINGQAAAABJRU5ErkJggg==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/1b7e9fdc83357f64fb5f28c75d088780/bd3a8/01-cover-01.png 250w,
/static/1b7e9fdc83357f64fb5f28c75d088780/0757b/01-cover-01.png 500w,
/static/1b7e9fdc83357f64fb5f28c75d088780/eb0de/01-cover-01.png 1000w,
/static/1b7e9fdc83357f64fb5f28c75d088780/37d21/01-cover-01.png 1280w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/1b7e9fdc83357f64fb5f28c75d088780/bd3a8/01-cover-01.png 250w,
/static/1b7e9fdc83357f64fb5f28c75d088780/0757b/01-cover-01.png 500w,
/static/1b7e9fdc83357f64fb5f28c75d088780/eb0de/01-cover-01.png 1000w,
/static/1b7e9fdc83357f64fb5f28c75d088780/37d21/01-cover-01.png 1280w" src="/static/1b7e9fdc83357f64fb5f28c75d088780/eb0de/01-cover-01.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/top-33-javascript-projects-on-github-august-2018/"><h3 class="text-xl ">Top 33 JavaScript Projects on GitHub (August 2018)</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Aug 18, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">Top of JavaScript projects as for 2018</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/playing-with-discrete-fourier-transform-algorithm/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:74.8%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIFAQT/xAAVAQEBAAAAAAAAAAAAAAAAAAABAP/aAAwDAQACEAMQAAABbZ7r3EwL/8QAGxABAAICAwAAAAAAAAAAAAAAAQISAAMREyH/2gAIAQEAAQUCiFNaW7pGMuMNni2f/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAECEiH/2gAIAQMBAT8BU7Gn/8QAGhEAAQUBAAAAAAAAAAAAAAAAAAECAxESIf/aAAgBAgEBPwFY89Kaf//EABwQAQABBAMAAAAAAAAAAAAAAAABAhESIjFBUf/aAAgBAQAGPwJl44papjtd/8QAGxAAAgMBAQEAAAAAAAAAAAAAAAERITFRQaH/2gAIAQEAAT8hnMrtlwU9ThhTPbZhkkaWn0rCg//aAAwDAQACAAMAAAAQCB//xAAZEQEAAgMAAAAAAAAAAAAAAAABABEhQbH/2gAIAQMBAT8QWxtiPN8n/8QAFxEBAAMAAAAAAAAAAAAAAAAAAAERUf/aAAgBAgEBPxC4zk//xAAcEAEBAAIDAQEAAAAAAAAAAAABEQAhMVGhQZH/2gAIAQEAAT8QuQpU026/MAksoITTr7kgNeUHzLmDqHEuR2uwUfWNICSOf//Z" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/48a3034f7bf62d973a0b625c2a27f558/d2e8d/01-cover.jpg 250w,
/static/48a3034f7bf62d973a0b625c2a27f558/55b1d/01-cover.jpg 500w,
/static/48a3034f7bf62d973a0b625c2a27f558/8a93d/01-cover.jpg 900w" sizes="(max-width: 900px) 100vw, 900px" /><img loading="lazy" sizes="(max-width: 900px) 100vw, 900px" srcset="/static/48a3034f7bf62d973a0b625c2a27f558/d2e8d/01-cover.jpg 250w,
/static/48a3034f7bf62d973a0b625c2a27f558/55b1d/01-cover.jpg 500w,
/static/48a3034f7bf62d973a0b625c2a27f558/8a93d/01-cover.jpg 900w" src="/static/48a3034f7bf62d973a0b625c2a27f558/8a93d/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/playing-with-discrete-fourier-transform-algorithm/"><h3 class="text-xl ">Playing with Discrete Fourier Transform Algorithm in JavaScript</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Aug 17, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">Complex but yet magical topic!</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/extend-your-limits-rather-than-your-ambitions/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:66.39999999999999%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQAC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwAB/9oADAMBAAIQAxAAAAEqZwokytZ//8QAGRAAAgMBAAAAAAAAAAAAAAAAAAEDEhMR/9oACAEBAAEFAqlTg40ZozR//8QAFREBAQAAAAAAAAAAAAAAAAAAACH/2gAIAQMBAT8Bqv/EABURAQEAAAAAAAAAAAAAAAAAAAAh/9oACAECAQE/AYj/xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAYEAEBAAMAAAAAAAAAAAAAAAABABARUf/aAAgBAQABPyFUotrhnG//2gAMAwEAAgADAAAAEKMv/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEh/9oACAEDAQE/EMo//8QAFREBAQAAAAAAAAAAAAAAAAAAECH/2gAIAQIBAT8Qof/EABwQAAICAgMAAAAAAAAAAAAAAAABESExUUFhof/aAAgBAQABPxBPggpStTTkWoZz4NE6z//Z" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/775b4de81d2c22185488c09f3e30284b/d2e8d/01-cover.jpg 250w,
/static/775b4de81d2c22185488c09f3e30284b/55b1d/01-cover.jpg 500w,
/static/775b4de81d2c22185488c09f3e30284b/9aebb/01-cover.jpg 1000w,
/static/775b4de81d2c22185488c09f3e30284b/e4ddd/01-cover.jpg 1500w,
/static/775b4de81d2c22185488c09f3e30284b/6dae3/01-cover.jpg 2000w,
/static/775b4de81d2c22185488c09f3e30284b/a2314/01-cover.jpg 4000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/775b4de81d2c22185488c09f3e30284b/d2e8d/01-cover.jpg 250w,
/static/775b4de81d2c22185488c09f3e30284b/55b1d/01-cover.jpg 500w,
/static/775b4de81d2c22185488c09f3e30284b/9aebb/01-cover.jpg 1000w,
/static/775b4de81d2c22185488c09f3e30284b/e4ddd/01-cover.jpg 1500w,
/static/775b4de81d2c22185488c09f3e30284b/6dae3/01-cover.jpg 2000w,
/static/775b4de81d2c22185488c09f3e30284b/a2314/01-cover.jpg 4000w" src="/static/775b4de81d2c22185488c09f3e30284b/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/extend-your-limits-rather-than-your-ambitions/"><h3 class="text-xl ">Extend your LIMITS rather than your AMBITIONS</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jul 16, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>3<!-- --> min to read</div></div><div class="font-light">Extending ambitions rather than limits will bring nothing more than additional stress, unhappiness and dissatisfaction to our lives.</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/gift-of-24-hours/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:56.400000000000006%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMBAgQF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAeK+meV5Af/EABoQAQADAAMAAAAAAAAAAAAAAAEAAgMSEyH/2gAIAQEAAQUCPJyrc6mbhXSCz//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABoQAAICAwAAAAAAAAAAAAAAAAABAhEQITH/2gAIAQEABj8CsqSNMpcz/8QAHBABAAICAwEAAAAAAAAAAAAAAQARITEQYXGB/9oACAEBAAE/IcSvJU5BpNks1J3HI1Qx84obZ//aAAwDAQACAAMAAAAQqN//xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQMBAT8QqY//xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQIBAT8Qi6//xAAeEAEAAgEEAwAAAAAAAAAAAAABABEhMUFRYZGh8P/aAAgBAQABPxBUbAe0AiQrA+OIstLoqnxKAg5bdCwwkNUI6Z//2Q==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/623e462678764029144b32122798fcdf/d2e8d/01-cover.jpg 250w,
/static/623e462678764029144b32122798fcdf/55b1d/01-cover.jpg 500w,
/static/623e462678764029144b32122798fcdf/9aebb/01-cover.jpg 1000w,
/static/623e462678764029144b32122798fcdf/cc589/01-cover.jpg 1280w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/623e462678764029144b32122798fcdf/d2e8d/01-cover.jpg 250w,
/static/623e462678764029144b32122798fcdf/55b1d/01-cover.jpg 500w,
/static/623e462678764029144b32122798fcdf/9aebb/01-cover.jpg 1000w,
/static/623e462678764029144b32122798fcdf/cc589/01-cover.jpg 1280w" src="/static/623e462678764029144b32122798fcdf/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/gift-of-24-hours/"><h3 class="text-xl ">The gift of 24 hours</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jul 3, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>6<!-- --> min to read</div></div><div class="font-light">Advice on how to spend the 24 hours you have more productively</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/permutations-combinations-cheat-sheet/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:70.8%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAOABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3VEUf//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAQUCX//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEABj8CX//EABcQAQEBAQAAAAAAAAAAAAAAAAARARD/2gAIAQEAAT8h5URmP//aAAwDAQACAAMAAAAQK+//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAbEAACAgMBAAAAAAAAAAAAAAAAASExQVFxof/aAAgBAQABPxBy8jcXwSbKLo4Pwgtn/9k=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/45e47234d87e36b44a7dee15af13be6d/d2e8d/01-cover.jpg 250w,
/static/45e47234d87e36b44a7dee15af13be6d/55b1d/01-cover.jpg 500w,
/static/45e47234d87e36b44a7dee15af13be6d/7dce8/01-cover.jpg 880w" sizes="(max-width: 880px) 100vw, 880px" /><img loading="lazy" sizes="(max-width: 880px) 100vw, 880px" srcset="/static/45e47234d87e36b44a7dee15af13be6d/d2e8d/01-cover.jpg 250w,
/static/45e47234d87e36b44a7dee15af13be6d/55b1d/01-cover.jpg 500w,
/static/45e47234d87e36b44a7dee15af13be6d/7dce8/01-cover.jpg 880w" src="/static/45e47234d87e36b44a7dee15af13be6d/7dce8/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/permutations-combinations-cheat-sheet/"><h3 class="text-xl ">Permutations/Combinations Algorithms Cheat Sheets</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 29, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">This article briefly describes the difference between mathematical permutations and combinations,explains the main idea behind permutations and combinations algorithms and contains links to algorithms implementation in JavaScript.</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/dynamic-programming-vs-divide-and-conquer/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:16.4%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAIAAAAcOLh5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVQI12NQ80hWdE2Qd4mXc45X90zW9ExRdE2Qc47X8kqRcoxVdU/CIZsq6RjDoOyWqOCSoOiaoOqRpOASL+kQI+ccp+6ZrOeTJu8Sj0dWwSWewcg/U9w+WsMzRdg2UtEtQcoxRswuSsUtyTI4R845Ts83XcIBi6xVSI6UYwwAtwgu0AyOKLMAAAAASUVORK5CYII=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/2207cb6352250f4c7593b87071c55705/bd3a8/01-cover.png 250w,
/static/2207cb6352250f4c7593b87071c55705/0757b/01-cover.png 500w,
/static/2207cb6352250f4c7593b87071c55705/62b78/01-cover.png 880w" sizes="(max-width: 880px) 100vw, 880px" /><img loading="lazy" sizes="(max-width: 880px) 100vw, 880px" srcset="/static/2207cb6352250f4c7593b87071c55705/bd3a8/01-cover.png 250w,
/static/2207cb6352250f4c7593b87071c55705/0757b/01-cover.png 500w,
/static/2207cb6352250f4c7593b87071c55705/62b78/01-cover.png 880w" src="/static/2207cb6352250f4c7593b87071c55705/62b78/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/dynamic-programming-vs-divide-and-conquer/"><h3 class="text-xl ">Dynamic Programming vs Divide-and-Conquer</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 15, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>7<!-- --> min to read</div></div><div class="font-light">In this article I’m trying to explain the difference/similarities between dynamic programing and divide and conquer approaches based on two examples - binary search and minimum edit distance (Levenshtein distance)</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/links-to-promote-your-next-startup/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:42.4%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQC/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/2gAMAwEAAhADEAAAAaKADQlb/8QAGBAAAgMAAAAAAAAAAAAAAAAAAQIAEyH/2gAIAQEAAQUCdDZAc//EABcRAQADAAAAAAAAAAAAAAAAAAACETH/2gAIAQMBAT8Bnq3/xAAXEQEAAwAAAAAAAAAAAAAAAAAAAhEx/9oACAECAQE/AYYp/8QAGxAAAQQDAAAAAAAAAAAAAAAAAQACEBEhMUH/2gAIAQEABj8CYb0eRkr/xAAaEAACAgMAAAAAAAAAAAAAAAABEQAQIVFh/9oACAEBAAE/ISco0vTtDAoc/9oADAMBAAIAAwAAABB7z//EABcRAAMBAAAAAAAAAAAAAAAAAAABEUH/2gAIAQMBAT8QzE0P/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERQf/aAAgBAgEBPxDQaU//xAAYEAEAAwEAAAAAAAAAAAAAAAABABEhUf/aAAgBAQABPxAyoaAtjp7kqyuw7x92f//Z" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/0a1588fa4a44c94fefb549c921d04c44/d2e8d/01-cover.jpg 250w,
/static/0a1588fa4a44c94fefb549c921d04c44/55b1d/01-cover.jpg 500w,
/static/0a1588fa4a44c94fefb549c921d04c44/9aebb/01-cover.jpg 1000w,
/static/0a1588fa4a44c94fefb549c921d04c44/e4ddd/01-cover.jpg 1500w,
/static/0a1588fa4a44c94fefb549c921d04c44/c9f61/01-cover.jpg 1880w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/0a1588fa4a44c94fefb549c921d04c44/d2e8d/01-cover.jpg 250w,
/static/0a1588fa4a44c94fefb549c921d04c44/55b1d/01-cover.jpg 500w,
/static/0a1588fa4a44c94fefb549c921d04c44/9aebb/01-cover.jpg 1000w,
/static/0a1588fa4a44c94fefb549c921d04c44/e4ddd/01-cover.jpg 1500w,
/static/0a1588fa4a44c94fefb549c921d04c44/c9f61/01-cover.jpg 1880w" src="/static/0a1588fa4a44c94fefb549c921d04c44/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/links-to-promote-your-next-startup/"><h3 class="text-xl ">50 links you may use to promote your next startup for free</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 11, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">The list of 50+ platforms you may use to promote your next project</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/algorithms-and-data-structures-in-javascript/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:66%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAACyklEQVQoz1WPyU8TYRjG59/whCSePJBojFFjjAdNxM6UaSNHwEAiRyPxSIXOdDpbLcSoEY2xUgwmLIZYWVsL3Sh7gVYK7VBoKCaUpTMthS7f95kWYkLyO7yH58nzezFYLBSOUscHewOLZotXZ1sxb0imlSCzE3+bTnSkElx+82Pa1ZXxv8s7+5O9fan+fri9jZQTpChYdiuWoOioThendFkTlzRSO/rWFEsVO/iimSuaWWDmiyJfNHFAFAo8X+BMQHwDPrdB10ssI0VlipYpuiiISHyt0MypkQO8CHkTOEcsIZRhO2AnAweeQZcKztVjaSl6RBsOKTrPCwVekGkDEk3n0f+IAmDNpaO7BThrwTSB3ASabcIykpSi6COKLvBCnuMVA3OhLAqlcdYMu1rhSB30E8hPIp8WuIispwH7GwgojPFQTwFBVAzMKcvBs7IolD3NoJOBg83QU4P86mOHeneo+mBEpYxVn3ieYisTE4qRPSvLtKHACxc8rS+gsxb5CeTVFKZIeRzfsz3OONTQTaC5Jixotx8xxjPt0sMm8cwTfGiFo3XIT0BfTW6yRhnHlXE8N6lGPg3yaaCbgLONmBKJJNv0KdqQMZad2Q7QyaDBZuQjgVeddajlcTxtx/NTauglkZeEHhJ6NMilRv4mLC1J+3r9AUUpeg6KIvrWAiafnHpUygQuj+HHDgK4SOTRIlcZtxZ5NNBLFn2q3HI9JkcjyXbDQbsRdL2Cww25SeLUTubs5ei0Fs1owRyZXcJTq492gw9if+6vR+6G4ndmt655ow+xw/D67PPG2HtNwnZvc+RW7PftDffNVd/1hZmqmUCVO3jVHroyGqocXqu0hSt+hit+hS//WKro9V4amruBKfv7S87voWVrYNm6/Me6uPZ1IWJZ2rIEYpaxad42ZZhf+xSMWVel7rVtazjeE473rEa750NfgtG+f4tbH0xvHjHKAAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/273ea2aa5efcf314b4deab0091d1b364/bd3a8/01-cover.png 250w,
/static/273ea2aa5efcf314b4deab0091d1b364/0757b/01-cover.png 500w,
/static/273ea2aa5efcf314b4deab0091d1b364/62b78/01-cover.png 880w" sizes="(max-width: 880px) 100vw, 880px" /><img loading="lazy" sizes="(max-width: 880px) 100vw, 880px" srcset="/static/273ea2aa5efcf314b4deab0091d1b364/bd3a8/01-cover.png 250w,
/static/273ea2aa5efcf314b4deab0091d1b364/0757b/01-cover.png 500w,
/static/273ea2aa5efcf314b4deab0091d1b364/62b78/01-cover.png 880w" src="/static/273ea2aa5efcf314b4deab0091d1b364/62b78/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/algorithms-and-data-structures-in-javascript/"><h3 class="text-xl ">Algorithms and Data Structures in JavaScript</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>May 21, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">Collection of classic algorithms and data structures implemented in ES6 JavaScript with explanations and links to further readings and YouTube videos</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2018/aggregatus-service-is-live/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:62.4%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABC0lEQVQoz61TS2rDMBA11Map/7I+IYFm0xwgobmEaY5gmpUP5IU3TXVVvTAiU0zATki7ECMZzZv3kYNKCFdLCamUq4SAqGtwfWYFtZSONtoYD/hX0EBp7ZTWdHBSqVmg8cBJQJJ8BfKVwLmRV1lVKMqSbLnLPmAPienVS4wrDVit13jbbPAShsjyfJat95CaKRRmQCBmufQNbdui73sMw4Cv0wnv2y3yophmyEBUiRGz08Z4mV3XwVqLH2vxfT7j43BAkqb+3kOSGZBY0n6336NpGnwej4gXC6RZ5r9PSr4NhZiNA3lNEoRRhCiOwQNnQ+Fnw17eTmbGjyT86yFLHl9++mGTVGb4H7/eBQM4LdEmy4qPAAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/26d12517f074bef42315f12219a81b42/bd3a8/01-cover.png 250w,
/static/26d12517f074bef42315f12219a81b42/0757b/01-cover.png 500w,
/static/26d12517f074bef42315f12219a81b42/eb0de/01-cover.png 1000w,
/static/26d12517f074bef42315f12219a81b42/3c6b4/01-cover.png 1500w,
/static/26d12517f074bef42315f12219a81b42/950cd/01-cover.png 2000w,
/static/26d12517f074bef42315f12219a81b42/be98d/01-cover.png 2100w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/26d12517f074bef42315f12219a81b42/bd3a8/01-cover.png 250w,
/static/26d12517f074bef42315f12219a81b42/0757b/01-cover.png 500w,
/static/26d12517f074bef42315f12219a81b42/eb0de/01-cover.png 1000w,
/static/26d12517f074bef42315f12219a81b42/3c6b4/01-cover.png 1500w,
/static/26d12517f074bef42315f12219a81b42/950cd/01-cover.png 2000w,
/static/26d12517f074bef42315f12219a81b42/be98d/01-cover.png 2100w" src="/static/26d12517f074bef42315f12219a81b42/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2018/aggregatus-service-is-live/"><h3 class="text-xl ">Aggregatus — new data aggregation service — is now live and in alpha</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Mar 7, 2018</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">Aggregate data from many sources into one collection</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2017/docker-whale-in-digital-ocean/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:42.4%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAABKUlEQVQY02NQXX8HA91W3Xhffdl5zc5lGtN2qK27rbryCqYytQ13GLBo3nBXfflFhb6Nyu3LVPo2KM3YrzL3mOqGu0Rqvie39JLR7L0qsw8w9+yUmH5QZc0Nom1ef8d2x4PY/fe9Nl312HzNe88ji233sGtW23AXDalvuBt94FHZ2Ze5p16kHX1SePyxy477yutB4ijKNt5lUFp9Q3ntLfmV15TW3FRacxPCUFx9U2vtDa11t6RXXJNacV1hzU2FVdcUV99AVqCw6hqDwsprCqtvyK+8JgdmyK24Kr8SpE5m+VW5ldcUV12XX3EVRK66LoeqUn7lVQa7g2+s9r+yO/TO5sBrmwOv7Q69s97/2ubAG3sQ45Xdobe2B99aQxW8sd7/Gq7S/tA7AK92EHPIaYYnAAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/6d040260e8b7914682fbc31bdd3f4712/bd3a8/01-cover.png 250w,
/static/6d040260e8b7914682fbc31bdd3f4712/0757b/01-cover.png 500w,
/static/6d040260e8b7914682fbc31bdd3f4712/eb0de/01-cover.png 1000w,
/static/6d040260e8b7914682fbc31bdd3f4712/3c6b4/01-cover.png 1500w,
/static/6d040260e8b7914682fbc31bdd3f4712/950cd/01-cover.png 2000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/6d040260e8b7914682fbc31bdd3f4712/bd3a8/01-cover.png 250w,
/static/6d040260e8b7914682fbc31bdd3f4712/0757b/01-cover.png 500w,
/static/6d040260e8b7914682fbc31bdd3f4712/eb0de/01-cover.png 1000w,
/static/6d040260e8b7914682fbc31bdd3f4712/3c6b4/01-cover.png 1500w,
/static/6d040260e8b7914682fbc31bdd3f4712/950cd/01-cover.png 2000w" src="/static/6d040260e8b7914682fbc31bdd3f4712/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2017/docker-whale-in-digital-ocean/"><h3 class="text-xl ">Docker Whale in Digital Ocean or Automated Continuous Delivery Flow For Simple Projects</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Aug 30, 2017</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>5<!-- --> min to read</div></div><div class="font-light">The main idea is to automate project’s code and environment deployment to production and to make this process to be smooth and easy</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2017/if-you-ever-used-subway-you-should-know-what-binary-search-tree-is/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:65.6%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAQP/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAB6ZKhVQ4P/8QAGBAAAwEBAAAAAAAAAAAAAAAAAQIDEiH/2gAIAQEAAQUCSYAUzYtLtHbQ4820n//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/AUf/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEv/aAAgBAgEBPwFb/8QAGhAAAwADAQAAAAAAAAAAAAAAAAEREBIhMf/aAAgBAQAGPwKsixpeEvgmz//EABoQAQACAwEAAAAAAAAAAAAAAAEAESExQWH/2gAIAQEAAT8h4UIjbPpuBLFw3RLpZskTYJ//2gAMAwEAAgADAAAAEHvP/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQAhMf/aAAgBAwEBPxDmEF2//8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARIf/aAAgBAgEBPxDVNWUcv//EABoQAQEBAQEBAQAAAAAAAAAAAAERADEhQXH/2gAIAQEAAT8QUwAqvw0cvz4H4x1DMxBpAvOuByQg85zNwsxVq7//2Q==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/8ea65c55b16cb4a04f22cdd36b7339e9/d2e8d/01-cover.jpg 250w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/55b1d/01-cover.jpg 500w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/9aebb/01-cover.jpg 1000w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/e4ddd/01-cover.jpg 1500w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/6dae3/01-cover.jpg 2000w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/0605b/01-cover.jpg 3000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/8ea65c55b16cb4a04f22cdd36b7339e9/d2e8d/01-cover.jpg 250w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/55b1d/01-cover.jpg 500w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/9aebb/01-cover.jpg 1000w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/e4ddd/01-cover.jpg 1500w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/6dae3/01-cover.jpg 2000w,
/static/8ea65c55b16cb4a04f22cdd36b7339e9/0605b/01-cover.jpg 3000w" src="/static/8ea65c55b16cb4a04f22cdd36b7339e9/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2017/if-you-ever-used-subway-you-should-know-what-binary-search-tree-is/"><h3 class="text-xl ">If you ever used subway you should know what Binary Search Tree is</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jul 13, 2017</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>3<!-- --> min to read</div></div><div class="font-light">Binary search trees, sometimes called ordered or sorted binary trees, are a particular type of container… bla…bla…bla… Stop!</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2017/dangerous-step-from-agile-to-fragile/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:45.2%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMElEQVQozwElAtr9ANmrlcmeib2Ve8mjhsCciHZnVXd4SoqGXn55ZFhVTC0zR0BFWVBVa4d+h8/FvoaDiDExPk9QaYmJpMC2vAC7raPDtKnMua3Pu67TvK3Tu6u1pZuLc2qsjHWym4ShkIOYl6dqb49yX2hzX2E1Mz87OUVZWHCMfYlqUlcAnpCUpJWYopOYpZecrJ2irZ2ftaSlimZgmXJswqWZ58ej5smdpZ2jrZOUj3Z4ODVARkVVdXKLmoGIoIOIAGRfc25oe311gpCEjpuOl5+QmKOVoKyOiuC5pMSgkoVcVsylfuG/mK6WnYh2gDYzPVdZco+FoKKIl56ElQCom1WMgVVsZFVNSVNLSFlPS2BeVmp0aHjOsKHMqJpvVVtPP0irlIywk5xrW2k4LDaBY2e/qq2agZOfg5IAyLBu0bVm07ZbwaJVqY1Qkn1Le25LZV1Im4h6rpqVVUtaTUJPUkVTdGBuVkZRPjA4aUVGzqSKtJWYlXeHAJiHlYt5got4eKKNeLylctK6auLMYufUaOHVmdHArqaNfJl9dXpha2JPW0w/Sj01Pj8wOVs+QXhUVqmEhgCLeX+NeoKQfYaMd4SMd4iLdYOZgoWnjoi3npy3mpSniIGXd3iSc3qPb3d/YWpuVF1hS1RRQEpMOUOYd3cAjnqBj3qCkn2FmIGImoKIln2DlHqDmHuElnV7kXF5mnqDlXV9jG14h2hzgWFsgGBrgWFrf19qfmBqhmdxxDgRFkoaix4AAAAASUVORK5CYII=" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/442c7bfd5e97c33eae3aea57acc58022/bd3a8/01-cover.png 250w,
/static/442c7bfd5e97c33eae3aea57acc58022/0757b/01-cover.png 500w,
/static/442c7bfd5e97c33eae3aea57acc58022/eb0de/01-cover.png 1000w,
/static/442c7bfd5e97c33eae3aea57acc58022/3c6b4/01-cover.png 1500w,
/static/442c7bfd5e97c33eae3aea57acc58022/950cd/01-cover.png 2000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/442c7bfd5e97c33eae3aea57acc58022/bd3a8/01-cover.png 250w,
/static/442c7bfd5e97c33eae3aea57acc58022/0757b/01-cover.png 500w,
/static/442c7bfd5e97c33eae3aea57acc58022/eb0de/01-cover.png 1000w,
/static/442c7bfd5e97c33eae3aea57acc58022/3c6b4/01-cover.png 1500w,
/static/442c7bfd5e97c33eae3aea57acc58022/950cd/01-cover.png 2000w" src="/static/442c7bfd5e97c33eae3aea57acc58022/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2017/dangerous-step-from-agile-to-fragile/"><h3 class="text-xl ">Dangerous step from Agile to frAgile (fixed-requirements-Agile) software development</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 24, 2017</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>2<!-- --> min to read</div></div><div class="font-light">The dangerous step is — to FIX price, deadlines and vague scope for long-term project and at the same time try to be AGILE in development process.</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2017/solid-principles-around-you/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:36.8%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAAsTAAALEwEAmpwYAAABtklEQVQY0wGrAVT+AFJidUtdcGx7kGx7kHSDl4aRpG16jH+Nn5qlt4aRpIyZsH+Nom59kGx6i5CbroWTqm99kktZaGNwglFebgA0RFNBUmdwgJd5h5tzgpmjrsJ+jaFMX3Odp7hjdIhzgZNaaHlmc4SKlKVvfpShqr1ib4I8SlZSXWxBTl0AOEhYVWZ8R1ltKz1PYnKGkZ2yipiuaHmOZHSHcoOYOktbUGJ0a3qPj5quU2J2k5yucX+TZHCBbXeHaHSFABMgK0pbcFlqfjdJXWd3j3uJn4WRpWVzhT9QZG5/lGRzhY6csqWvxXyIm1dnfW58ko+bsGl1iGNvglpofgBWZ31ic4hvfZBXaYB6iaBygZRXZXeFkKBicoZZa4Fnd4pjc4aOnLNldYpgcIehq7+ZoLBiboFWZXk+TV0AWGl+RlZoQ09fS1xymaW9o6u9OkxfXWt/dIWeboCYipmxhJOphJGlhJGmgo2hbHqPhpGlRE9dJjZFKDpJADtNXTZIWEVTYkRXbpyovouVqVRmfHmInT9RZTNFWpelvnB/lpSfs299j2NxhIiTpZqitmVxgx4tO0labiNPxPqSMLxzAAAAAElFTkSuQmCC" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/303c04e4144fcefd42fcca7661368b5c/bd3a8/01-cover.png 250w,
/static/303c04e4144fcefd42fcca7661368b5c/0757b/01-cover.png 500w,
/static/303c04e4144fcefd42fcca7661368b5c/eb0de/01-cover.png 1000w,
/static/303c04e4144fcefd42fcca7661368b5c/3c6b4/01-cover.png 1500w,
/static/303c04e4144fcefd42fcca7661368b5c/950cd/01-cover.png 2000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/303c04e4144fcefd42fcca7661368b5c/bd3a8/01-cover.png 250w,
/static/303c04e4144fcefd42fcca7661368b5c/0757b/01-cover.png 500w,
/static/303c04e4144fcefd42fcca7661368b5c/eb0de/01-cover.png 1000w,
/static/303c04e4144fcefd42fcca7661368b5c/3c6b4/01-cover.png 1500w,
/static/303c04e4144fcefd42fcca7661368b5c/950cd/01-cover.png 2000w" src="/static/303c04e4144fcefd42fcca7661368b5c/eb0de/01-cover.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2017/solid-principles-around-you/"><h3 class="text-xl ">S.O.L.I.D. Principles Around You</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 20, 2017</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>1<!-- --> min to read</div></div><div class="font-light">Real-world visual examples of SOLID principles</div></div></div><div class="transition duration-200 ease-in-out shadow-card rounded-md overflow-hidden bg-white flex flex-col sm:flex-row items-stretch"><div class="transition duration-200 ease-in-out transform hover:-translate-y-1 hover:scale-105 h-48 bg-cover bg-gray-200 overflow-hidden block cursor-pointer sm:h-auto sm:w-2/5 lg:w-1/4"><a class=" " href="/blog/2017/how-to-create-aot-jit-compatible-angular-4-library/"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;height:100%"><div aria-hidden="true" style="width:100%;padding-bottom:56.400000000000006%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDAf/EABcBAAMBAAAAAAAAAAAAAAAAAAABAwT/2gAMAwEAAhADEAAAAVnqCcgS0f/EABgQAAMBAQAAAAAAAAAAAAAAAAABAhEh/9oACAEBAAEFAqGVmx0fVp//xAAYEQADAQEAAAAAAAAAAAAAAAAAARICEf/aAAgBAwEBPwGl2RaP/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQASEf/aAAgBAgEBPwHKnLJf/8QAGhAAAgIDAAAAAAAAAAAAAAAAAAEQISIxgf/aAAgBAQAGPwJ6FZiqOFx//8QAGhABAAMBAQEAAAAAAAAAAAAAAQARITFBUf/aAAgBAQABPyFFDXyAGxCrWtI3xU9nAZarpgq7P//aAAwDAQACAAMAAAAQ7D//xAAaEQACAgMAAAAAAAAAAAAAAAABEQAhMbHh/9oACAEDAQE/EAN2DUCgtdn/xAAaEQACAgMAAAAAAAAAAAAAAAAAEQEhMbHh/9oACAECAQE/EKAsOSWXvh//xAAbEAEBAAMBAQEAAAAAAAAAAAABEQAxYSFR4f/aAAgBAQABPxCNAjBbFbT7+5qOK1x+3uCNEIfbiuFK8k1rGSfQq9w44z//2Q==" title="" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/84e514bd76b8318fa3c404718860281c/d2e8d/01-cover.jpg 250w,
/static/84e514bd76b8318fa3c404718860281c/55b1d/01-cover.jpg 500w,
/static/84e514bd76b8318fa3c404718860281c/9aebb/01-cover.jpg 1000w,
/static/84e514bd76b8318fa3c404718860281c/e4ddd/01-cover.jpg 1500w,
/static/84e514bd76b8318fa3c404718860281c/6dae3/01-cover.jpg 2000w,
/static/84e514bd76b8318fa3c404718860281c/a2314/01-cover.jpg 4000w" sizes="(max-width: 1000px) 100vw, 1000px" /><img loading="lazy" sizes="(max-width: 1000px) 100vw, 1000px" srcset="/static/84e514bd76b8318fa3c404718860281c/d2e8d/01-cover.jpg 250w,
/static/84e514bd76b8318fa3c404718860281c/55b1d/01-cover.jpg 500w,
/static/84e514bd76b8318fa3c404718860281c/9aebb/01-cover.jpg 1000w,
/static/84e514bd76b8318fa3c404718860281c/e4ddd/01-cover.jpg 1500w,
/static/84e514bd76b8318fa3c404718860281c/6dae3/01-cover.jpg 2000w,
/static/84e514bd76b8318fa3c404718860281c/a2314/01-cover.jpg 4000w" src="/static/84e514bd76b8318fa3c404718860281c/9aebb/01-cover.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></a></div><div class="p-6 sm:w-3/5 lg:w-3/4" style="flex:1"><div class="mb-3"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " href="/blog/2017/how-to-create-aot-jit-compatible-angular-4-library/"><h3 class="text-xl ">How to create AOT/JIT compatible Angular 4 library with external SCSS/HTML templates</h3></a></div><div class="flex flex-row items-center text-xs text-gray-500 mb-3"><div class="flex flex-row items-center mr-6"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>Jun 7, 2017</div><div class="flex flex-row items-center "><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="mr-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>13<!-- --> min to read</div></div><div class="font-light">Example of how to create a re-usable npm library for Angular projects</div></div></div></div></article><footer class="px-6 sm:px-12 py-12"><div class="flex flex-col sm:flex-row items-center "><div style="flex:1" class="flex flex-row items-center mb-6 sm:mb-0"><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 text-xs mr-5" href="/subscribe"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" height="20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 110.8V792H136V270.8l-27.6-21.5 39.3-50.5 42.8 33.3h643.1l42.8-33.3 39.3 50.5-27.7 21.5zM833.6 232L512 482 190.4 232l-42.8-33.3-39.3 50.5 27.6 21.5 341.6 265.6a55.99 55.99 0 0 0 68.7 0L888 270.8l27.6-21.5-39.3-50.5-42.7 33.2z"></path></svg><span class="w-2"></span>Subscribe</a><a href="https://github.com/trekhleb/trekhleb.github.io/discussions" class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 text-xs mr-5"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg><span class="w-2"></span>Feedback</a><a class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 text-xs" href="/rss.xml"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg><span class="w-2"></span>RSS</a></div><div style="flex:1" class="flex flex-row items-center justify-center"><ul class="flex flex-row flex-wrap "><li class="flex flex-row items-center last:mr-0 mr-2 ml-2"><a href="https://www.linkedin.com/in/trekhleb/" class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " title="Oleksii Trekhleb on LinkedIn"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg></a></li><li class="flex flex-row items-center last:mr-0 mr-2 ml-2"><a href="https://github.com/trekhleb" class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " title="Oleksii Trekhleb on GitHub"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></a></li><li class="flex flex-row items-center last:mr-0 mr-2 ml-2"><a href="https://twitter.com/Trekhleb" class="transition duration-200 ease-in-out flex flex-row items-center hover:text-red-600 " title="Oleksii Trekhleb on Twitter"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></a></li></ul></div><div style="flex:1" class="hidden sm:flex"> </div></div></footer></div></main></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-YJ73BX984Z"></script><script>
if(true) {
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer && window.dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-YJ73BX984Z', {"send_page_view":false});
}
</script><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/blog/";/*]]>*/</script><script id="gatsby-chunk-mapping">/*<![CDATA[*/window.___chunkMapping={"polyfill":["/polyfill-b7afeec9af34d175ba4b.js"],"app":["/app-2e0826ec06cafce3bdee.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-63f1eb2c9d9eccd00add.js"],"component---src-pages-blog-tsx":["/component---src-pages-blog-tsx-09e5ed745cd76684f8ac.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-700f213869b8e0037911.js"],"component---src-pages-projects-tsx":["/component---src-pages-projects-tsx-781dc12fd2babbe9fac0.js"],"component---src-pages-subscribe-confirm-index-tsx":["/component---src-pages-subscribe-confirm-index-tsx-7d43f1b2228f03a924f8.js"],"component---src-pages-subscribe-index-tsx":["/component---src-pages-subscribe-index-tsx-c02ecb9201e3fc4b2ce6.js"],"component---src-pages-subscribe-thanks-index-tsx":["/component---src-pages-subscribe-thanks-index-tsx-cec855950644a6361532.js"],"component---src-templates-post-tsx":["/component---src-templates-post-tsx-c4045391b1a7c095d609.js"],"component---src-templates-project-tsx":["/component---src-templates-project-tsx-d7e84ca35145045f8249.js"]};/*]]>*/</script><script src="/polyfill-b7afeec9af34d175ba4b.js" nomodule=""></script><script src="/component---src-pages-blog-tsx-09e5ed745cd76684f8ac.js" async=""></script><script src="/1254dea0549e67f9c6b7574de1277b85c557acbf-5b8be32205ce327d28c3.js" async=""></script><script src="/commons-213c962999d4e181c8a0.js" async=""></script><script src="/app-2e0826ec06cafce3bdee.js" async=""></script><script src="/framework-d63adeb7e1b44b7b8aa5.js" async=""></script><script src="/webpack-runtime-6451c7fe678794e00b4b.js" async=""></script></body></html>