teleren/devto huggingface dataset:
Reviving the parser service in Telescope
Tags: telescope, osd700, opensource
Published: 2022-02-13 04:20:10

This week is the last one before we wrap up Telescope version 2.7, and I couldn't be more surprised with what I achieved...

While I haven't finished a particular [issue](https://github.com/Seneca-CDOT/telescope/issues/2680), I did work on a couple of smaller ones, like [#2906](https://github.com/Seneca-CDOT/telescope/pull/2906) and [#2904](https://github.com/Seneca-CDOT/telescope/pull/2904). Instead, most of the work I did today was working on a review on a really big PR. 😁

## The Parser service

Let me tell a short story about the Parser service.

When Telescope shipped in the 2.0 release, it moved its monolithic infrastructure into microservices, but there were still remains of the old infrastructure since the rewriting of the system couldn't make it to the release. This is where the parser service comes into play.💁🏼‍♀️💁🏼‍♀️

The parser service was supposed to be the one in charge of doing the most important part of Telescope: aggregating the feed posts into a database so that they could be read by other microservices. The keyword here is *was*! The parser service stayed on a frozen-like state, where no progress was being made due to how big the change was, and how crucial it was to the whole infrastructure. This is the reason why Telescope ended up having to keep its legacy backend infrastructure, as a way to not freeze progress on other aspect of the proyect.

Well, that is no more the case until [TueeNguyen]((https://github.com/TueeNguyen) decided to work on this task. He created a [PR](https://github.com/Seneca-CDOT/telescope/pull/2846) that took the biggest step for this migration of the infrastructure. He requested several Telescope members to review his work, and I was one of them.

(Great job, Tue!!:D) 

## No pain, no gain!

If I had to be honest, I was somewhat intimidated by the PR. Over 1k line changes that went over 30 or more files, how could I actually review something like this? 🙈☠😱🤯🤯

Well, since I wanted to provide as much feedback as I could, I went through the entire changes...

Yeah, you heard me right, I went through the entire parser service, reading each file until I had an idea of what each thing did.

This is probably the most amount of work I ever put into a review, and I am somewhat satisfied being able to understand the parser service a little bit more.😋😋 I also run the program with the changes and I made sure that it run just fine. I had a couple of issues that I am not really sure if they are related, but it seems to be working as fine as the legacy back-end!🤩💃

I'm going to cross my fingers that the PR passes review and we end up with the parser service working for release 2.7! 🙏🏻🙏🏻🤞🏻🤞🏻🤞🏻 

Pray for us!!
Problem Solving for Developers - Javascript
Tags: javascript, beginners, tutorial, programming
Published: 2022-02-13 04:19:54

Hey, Everyone! 👋
I'm Dreamy! 🧔 Today's problem [easy]
Have a bit of coding yourself and see what kind of solution you came up with, and comment down your best solution. 🙏

```js
/**
 * Given an array of size N consisting of only 0's and 1's.
 * The array is sorted in such a manner that all the 1's are placed first
 * and then they are followed by all the 0's.
 * Find the count of all the 0's.
 * Example 1:
 * Input:
 * N = 12
 * array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]
 * Output: 3
 * Explanation: There are 3 0's in the given array.
 * Example 2:
 * Input:
 * N = 5
 * array = [0, 0, 0, 0, 0]
 * Output: 5
 * Explanation: There are 5 0's in the array.
 */
```


{% youtube Tm3r4lkbQUw %}
How does TLS handshake work?
Tags: http, https, tls, ssl
Published: 2022-02-13 04:19:50

Ever wondered what happens when you request a website? 

Sure there are many many things happening behind the scenes and it will take forever if I wanted to explain all of that in one article, but I can take each step at a time and try to explain what happens in each step. 

Ready?

In today's world, using HTTPS is no longer an option. It's a necessity and everyone should use it, but how does it work? What is this secure version of HTTP that everyone is talking about?

Ok, relax and sit back down and listen to me. 

We all know that HTTPS is the 'secure' version of HTTP. Duh! The 'S' at the end of it says it all. Of course everyone knows that. But we are here to take a little peak behind the curtain and see what's happening in the dark.

![TSL Handshake](https://tlseminar.github.io/images/tls-13/handshake1.2.png) 

There is a specific chain of events that are happening when a TLS handshake occurs:
1. [ClientHello](#clienthello)
2. [ServerHello](#serverhello)
3. [Authentication](#authentication)
4. [The Premaster Secret](#the-premaster-secret)
5. [ClientFinish](#clientfinish)
6. [ServerFinish](#serverfinish)

Let's break them down one by one.

###ClientHello
First the client sends a *Hello* message to the server indicating that it wants to initiate a TLS handshake.
This *Hello* message includes which TLS version the client supports, the cipher suites supported, and a string of random bytes known as the *client random.*

###ServerHello
Then the server replies with a *Hello* message of its own indicating that it's ready to create the handshake.
This *Hello* message includes the server's SSL certificate, the server's chosen cipher suite, and the *server random,* another random string of bytes that's generated by the server.

###Authentication
Now the client tries to verify the server's SSL certificate with it's issuer to make sure of its validity.

###The Premaster Secret
Now that the client has successfully verified that the SSL certificate is valid, it will generate one more random string, and encrypts it with the server's public key that it obtained from the SSL certificate in step [#2](#serverhello) and sends it to the server.

###ClientFinish
The client is now ready to finish the process of handshake. It will send a *Finish* message encrypted with the premaster secret to the server.

###ServerFinish
To finish the process, the server will send an encrypted *Finish* message to the client, indicating that the handshake is now complete.

After this process, the client and the server can safely exchange messages.

---
[Link to cover image](https://unsplash.com/photos/SRjZtxsK3Os)
Self-Taught Developer Journal, Day 58-59: TOP Building Rock Paper Scissors UI cont.
Tags: webdev, beginners, codenewbie, devjournal
Published: 2022-02-13 04:19:24

Today I continued working on the styling of my Rock Paper Scissors UI.

While I trying to add some finishing touched to my CSS layout, I realized I didn't really like how to set it up the first time. I think I might've been too focused on grouping the elements and not really understanding grid well. Now, I want to rearrange my layout.

## CSS Games: Flexbox Froggy and Grid Garden.
I decided to do practice some CSS through games I found [posted by Sajal Sharma]( https://twitter.com/SajalShlan/status/1490294139149484037) on Twtter. Specifically, [Flexbox Froggy](http://flexboxfroggy.com/) and [Grid Garden](http://cssgridgarden.com/). It was fun practicing in a game format and I feel a lot more comfortably using flex and grid now. I'm hoping to apply flex and grid better when I rearrange my HTML and CSS layout.

## Mike Chen and Allyse Arucan Twitch Stream
I really enjoy watching developer streams. It's so helpful to me to watch an experience developer talk through their thought process, tips, and visually seeing what their doing. I'm still looking for more streamers to follow, specifically frontend developers.

I've been watching streams by [Mike Chen](https://twitter.com/genericmikechen) and recently he did a live code review with [Allyse Arucan](https://twitter.com/allysedotdev) which I thought was very helpful. I'm still going through it, but I took a few notes on things that jumped out to me.

* When creating CSS classes, think about where else you can use it in your code base (reusability)
  * For example, reusing text styling and creating a class for it so it can be used for other elements
* In the Developer Tools, you drag HTML elements to move them in a block of code
  * use the "H" key to hide elements and determine hierarchy

There are a few more tips I forgot to note, but planning to watch it through again.

## Resources
[The Odin Project](https://www.theodinproject.com/paths/foundations/courses/foundations/)
[Revisiting Rock Paper Scissors](https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/revisiting-rock-paper-scissors)
給 PHP 開發者的 Docker 文件（三）
Published: 2022-02-13 04:17:13

（本文譯自〈[Docker for PHP Developers](https://www.newmediacampaigns.com/blog/docker-for-php-developers)〉）

## Docker 和 Vagarant 有什麼不同？

如果在每個專案同時運行多個容器（container）的情況下 Docker 比 Vagrant 好在哪裡？會比用 Vagrant 同時跑多部虛擬機的方式差嗎？No，原因如下述。

### Docker 映像是可擴展的（Extendable）

Docker 映像可擴展它的父映像（parent image），這點讓 Docker 映像更加類似於 PHP 類別（class）。例如一個 Nginx Docker 映像可擴展自 [phusion/baseimage](https://phusion.github.io/baseimage-docker/) Docker 映像，並且 phusion/baseimage 也擴展自最父層（top-most）的 [ubuntu Docker 映像](https://github.com/dockerfile/ubuntu)。每一個子映像只會包含與父映像有差異的部份，也就是說 ubuntu 映像只是一個小型的Ubuntu 作業系統；而 phusion/baseimage 裡面只有一些用於強化 Docker 容器（container）與作業的工具；最後的 Nginx 映像裡面也只有 Nginx 網頁伺服器和它的組態檔案。

互不相關的 Docker 映像也有可能擴展自同一個父輩（ancestor）映像，Docker 也鼓勵這麼做，如此一來那些被重複運用的映像只要下載一次就好。舉例來說，如果一個 Nginx 和另一個 PHP-FPM 映像都擴展自同樣的 ubuntu:14.04 Docker 映像，那麼這個共同的 Ubuntu 映像只要下載一次就好了。

### Docker 容器是輕量的（Lightweight）

Docker 容器是輕量的並且僅需求少量的系統資源就可運作，實際上只要需要的 Docker 映像下載好後，把一個 Docker 映像實例化（instantiating）成 Docker 容器跑起來只需要花幾秒鐘的時間，相較之下用 `vagrant up –provision` 去建構及腳本化實現（provision）一台虛擬機時常常都要花個 15 - 30 分鐘的時間。這樣的高效率基於兩個原因，首先每個 Docker 容器其實就只是個沙盒的系統程序（sandboxed system process），一個程序只做一件事；其次，所有的 Docker 容器都跑在一個共享的 Docker 母機（host machine），母機可以是你自己的 Linux 作業系統也可以只是個小型的 Linux 虛擬機。

Docker 容器同時也是暫存的（ephemeral）與免洗的（expendable），你可以摧毀（destroy）與取代（replace）某個 Docker 容器而不致影響到整個大型應用（application）。

假使容器只是暫存的，那我們要如何保存要留下的（persistent）應用資料？我也有過相同疑問。我們透過 Dockr 容器卷宗（volume）保存（persist）應用資料在 Docker 母機上。在後文中談到實例化 MySQL 容器時我們會再談談 Docker 容器卷宗。

### 相同母機、不同世界

不像 Vagrant，每個專案都需要完整的虛擬機（virtual machine）、檔案系統（filesystem）、與網路架構（network stack），Docker 容器跑在單一個共用的 Docker母機，怎麼辦到的呢？不同的 Docker 容器如果佔用到同樣的檔案系統或系統資源時不會互相衝突（collide）嗎？不會，而且這正是 Docker 的拿手絕活（pièce de résistance）。

Docker 被建立在它自有的低階的 Linux 函式庫上，稱為 libcontainer，這個工具透過對各種 Unix 與 Linux 的轉接器（adapter）來沙盒化單一的系統程序並限制它們存取系統資源。Docker 的 libcontainer 函式庫可讓不同的系統程序共存於同一個 Docker 母機上並且存取它們各自沙盒化的檔案系統與系統資源。

也就是說，Docker 並不只是 libcontainer 而已，Docker 是封裝（encapsulate）了許多包括 libcontainer 內的工具包，它具有 Docker 映像建立（creation）、移植性（portability）、版次性（versioning）、與分享（sharing）的能力。

Docker 具備多方之長（the best of both worlds）。Vagrant 只是個專注於硬體虛擬化的工具，反觀 Docker 更專注於程序隔離（isolation）。Vagrant 與 Docker 都致力達到的開發者的期望目標，它們創建互相隔離的應用運行環境，然而 Docker 以更好的效率與移植性做到這一點。

（待續…）
A cause for celebration...
Published: 2022-02-13 03:43:58

I've found a small project which hasn't been developed on yet.

An [IDataProtection](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/using-data-protection) provider using Google's [Firebase](https://firebase.google.com/):

- [https://github.com/kibblewhite/IDataProtectionFirebase](https://github.com/kibblewhite/IDataProtectionFirebase)

- [https://www.nuget.org/packages/IDataProtectionFirebase/](https://www.nuget.org/packages/IDataProtectionFirebase/)

I'm happy that I've managed to find a small project that hasn't already been done.

To use it is pretty straight forwards, get your project id and the json credentials file from GCP (Google Cloud Platform) for your Firebase Database and you are ready to rock.

In code usage "could" looks like this:
```csharp
public void ConfigureServices(IServiceCollection services)
{
    service_container.AddDataProtection()
        .PersistKeysToFirebase(service_name);

    services.AddMvc();
}
```

Rest of the details are in the [README.md](https://github.com/kibblewhite/IDataProtectionFirebase/blob/main/README.md)

p.s. The reason why this is a cause for celebration, is because this is offically my first personal nuget package/open source contribution.
Get CAUTH for Coursera
Tags: coursera
Published: 2022-02-13 03:17:28

Kindly follow these steps:
- 
Go to Coursera and log in

- 
then right click on your mouse and go to inspect 

- 
Go to Cookie Editor and look for 'CAUTH' and under that box  , you will have the key

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mpsz08o77qh15r4n04q0.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ck9u6pn09viopg5c3fpy.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xjflkypo0vg44cj71znr.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j2gyxfisbey6vxv9lmts.png)
Environment Variables in Python
Tags: python, programming, devops, security
Published: 2022-02-13 02:46:45

Environment variables are crucial in development so you don't accidentally commit keys/passwords up to a repo. Web developers in JavaScript will `process.env` to access their environment variables.

The cleanest way I've figured to do this is Python is to utilize an [Anaconda environment](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#setting-environment-variables) and setting them there accessing them in code with `os.environ`.

Here is a quick example from your terminal:
```
conda create -n test-env
conda activate test-env
conda env config vars set my_var=value
conda activate test-env
```
Once you have set your variable, you have activate your environment again as above.

To check if it worked, you can either `echo my_var` to check it specifically or `conda env config vars list` to see a list of them all.

If you want to reuse an environment, you can use a shell script to set and unset your variables upon deactivation. [See docs](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#saving-environment-variables) for how to do it in Windows (with a .bat file) and Mac/Linux.
"Programs are meant to be read by humans and for computers to execute,  right?"
Tags: beginners, discuss, codenewbie, algorithms
Published: 2022-02-13 02:00:36

So I am on [codewars](https://www.codewars.com/dashboard) (a coding practice site for programmers) solving coding challenges for fun and then I come across a question that is a little bit harder than usual 🤨. 

I tried multiple solutions, ate some snacks 🍿, had a bathroom break 🚽 (which played a significant role in solving the question later), read some blogs 💻, googled (totally normal 😅),  but the tests were still failing 😬. 

Eventually, maybe 30 mins later, I finally solved the problem 💪. I submitted my answer which was around 10 lines (lines don't matter but still). Then, I saw the best answer from the community that solved the problem in just one line 👀. ONE LINE 😳. With pure math 🧮. I was mind-blown 🤯.

Even though it was a correct answer and had many upvotes, many people (me included) have pointed it out that it was hard to read and understand for mainstream developers. For me, this is normal. I don't feel bad about my skills in cases like this, however, for beginners it might be a little upsetting that they couldn't come up with such solutions. To those who are feeling like that, I would say, don't feel frustrated. This is totally normal. One line or 10 lines, it does not matter. What matters is that the code you wrote works, readable and  understandable. This is my opinion.

What is your take in this case? At the end of the day, programs are meant to be read by humans and only for computers to execute, right? 

Anyway, to give you an idea how insane the answer was just read the comments 😅:

![Comments from codewars community](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/932bygelqcctk4ca0yeh.png)
Blog Post Automation Test
Tags: discovered, automation, blog
Published: 2022-02-13 01:46:03

I discovered [Bloggu.io](https://bloggu.io) while looking into automating my posts using the Hashnode and Dev.to API's.

This got me thinking, **how far can I take this?**

So, I jumped to [IFTTT.com](https://ifttt.com/) and had a look at their connectors. Sadly, Hashnode and Dev.to is not available, but I did find a connector for [Medium.com](https://medium.com), a platform I'll admit I did not know existed.

I quickly registered an account on Medium.com, although admittedly only to take advantage of the IFTTT connector. Next, I created two new applets in IFTTT:

**If I post on Medium.com, then post an update on my LinkedIn**
![Alt text](https://img.bloggu.io/ipfs/bafkreidxdt7hbu5fefqyvha36eplj5helnga5ezt5i3kzabs4xtt3ebu7m)

### AND

**If I post on Medium.com, then post a link on my Twitter**
![Alt text](https://img.bloggu.io/ipfs/bafkreiga5yzxhd3r6qeocbhoaujrh7gmtxwwcypzcurl42p6aao4jv4m5y)

## What does this all mean though?

By leveraging multiple automation systems, I hope to have create a post creating-sharing-automation beast 🐉

## So then, the question, "Does it work?"

We'll be finding out together 😎. I am using this post as the sample.
If it works, I'll update it below, and if it doesn't, I'll update it all the same 👇

### Automation Checks
[✅] Hashnode

[✅] Dev.to

[✅] Medium.com

[✅] Twitter

[✅] LinkedIn


## The take away

In theory, the automation worked like a charm ✨

It posted to my LinkedIn no problem:
![ksnip_20220212-185510.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1644717575070/HdBRMAxfq.png)

It also posted to my Twitter page, minutes after the blog posts went up:

![ksnip_20220212-185514.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1644717636039/VHJBZjZjs.png)

**BUT**

The experience was not...smooth 🧼:

Bloggu.io is great, but it's still in beta. I had to redo the same post twice because it doesn't autosave and spellcheck is non-existent, even with browser extensions enabled. By using Bloggu.io, I miss out on the feature rich editor of Hashnode.com, the autosaves, the spellcheck and the great metadata editor.

IFTTT.com is amazing, but relying on it takes away some of the charm, the style if you would...The links to the post are ugly redirect links, rendering my custom domain pointing useless. The posts feel...automated, non-inviting and I can only imagine the feeling getting worse as time progresses.

But the biggest problem, **Medium.com**. Don't get me wrong, the platform is fine, but I pointed my custom domain to the Hashnode network, because I put effort into the design and maintenance. The automated posts all direct to Medium.com, meaning it will never generate traffic to my Hashnode.com / Dev.to pages, and this is a deal breaker for me.

But, in the end, I had fun tinkering, as I always do 👨‍🔬
Google Ads Sertifika Cevapları
Tags: webdev, tutorial, javascript, opensource
Published: 2022-02-13 01:36:24

Ads sertifikaları, Google Ads'in temel ve ileri düzey kavramlarında yetkinlik gösteren kullanıcılara Google tarafından verilen profesyonel onay belgeleridir. Şu anda altı Google Ads sertifikası sunulmaktadır: Google Ads Arama Ağı, Google Ads Görüntülü Reklam Ağı, Google Ads Video, Alışveriş reklamları, Google Ads Uygulamaları ve Google Ads Ölçüm.

Not: Google Ads Ölçüm sertifikası, Partners rozetine dahil edilmez.

Google Ads sertifikası, Google'ın bu kişileri dijital reklamcılık uzmanı olarak onayladığını gösterir. Google Ads sertifikalarına Skillshop'taki Google Ads Sertifikasyonları sayfasından erişebilirsiniz.
Bu makalede sertifikalı olmanın sağladığı avantajlar, sertifika alma ve sertifikasyon durumunuzu başkalarına bildirmeyle ilgili bilgiler açıklanmaktadır.
Başlamadan önce
Skillshop hesabınız yoksa sertifikalı olmak için geçmeniz gereken Google Ads değerlendirmelerine erişmek üzere bir hesap oluşturmanız gerekir. 

Daha fazla detay için [Google Ads Sertifika Cevapları](https://googleadssertifika.com) sitemizi ziyaret edebilirsiniz.
linear-gradient() angle 📐
Tags: css
Published: 2022-02-13 01:12:48

The demo below is done in [linear-gradient playground](https://codepen.io/myquite/pen/dRyERY).
Special thanks to Mike White for the awesome playground ✨

## How does angle argument makes a change

Gradient starts from white⬜️ to red🟥.

`0deg` = `to top`
![angle-0](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vjdzkrk0to2wkdds55pz.png)

`45deg` ~~= `to right top`~~

![angle-45](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8bx9d66eh0hxm58y3tw.png)

`90deg` = `to right`
![angle-90](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bv1bd3eg6rgnjx0qan0i.png)

`180deg` = `to bottom`
![angle-180](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cs7oceheurciibyjsrvv.png)

`270deg` = `to left`
![angle-270](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8mded3w06tonfp6xfrwj.png)

360deg(Same as 0deg)
![angle-360](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0aonylevt25hcrfbkw3.png)

gif
![angle-in-motion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g0isdbjo6ou1p6pfuaz9.gif)
 
 
## Reference

- [linear-gradient() - CSS: Cascading Style Sheets | MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient())
Is just typing the difference between Typescript and Javascript?
Tags: javascript, typescript, programming, webdev
Published: 2022-02-13 01:03:57

## Hi, Devs!

So, the Typescript language came out and rapidly was being used around the Dev World. **The important think is always use de correct tool to answer the problem**, either Typescript or Javascript, or even other language.

To know important characteristics/concepts in programming we need to go back and read the literature about Computer Science and the essentials of languages.

A good example to learn is about _transpiler_, because the Typescript transpiler converts Typescript code to JavaScript.

And to answer the question of the title: **Absolutely there are a lot of differences**. And to get start, let's go to learn some concepts.

---

```
## const printJ = () => {return 'Javascript'}
```

## **What is dynamic typing?**
Dynamically-typed languages perform type checking at runtime. 

## **What is functional programming?**
That's a programming paradigm where programs are constructed by applying and composing functions.

---

```
## const printT = (): string => {return 'Typescript'}
```

## **What is static typing?**
Statically typed languages perform type checking at compile time.

## **What is oriented object programming (OOP)?**
That's a programming paradigm where programs are modeled by applying objects (classes, interfaces, abstract class, inheritance)

---

![programming paradigm](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7n6t44sgcxuzq10bxjsj.png)

Typescript has classes, Javascript [not](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Classes)?

```
class Person {
   private name: string = ''
   private age: number = 0

   constructor(name: string, age: number){
      this.name = name
      this.age = age
   }

   getName(): string { return this.name }

   getAge(): number { return this.age }
}

const teste = new Person('Calaça', 32)
console.log(teste.getName())

```

Typescript has Interface, Javascript not?

```
interface Person {
    firstName: string;
    lastName: string;
}

let john: Person = {
	firstName: 'Luiz',
	lastName: 'Calaça'
}
```

Typescript has Enum, Javascript not?

```
enum State {
    Progress = "In Progress",
    Finished = "Finished",
    NotCompleted = "Not completed "
}

//State.Progress
```

Typescript has Generics, Javascript not?

```
export abstract class IGenericRepository<T> {
  abstract getAll(): Promise<T[]>;

  abstract get(id: string): Promise<T>;

  abstract create(item: T): Promise<T>;

  abstract update(id: string, item: T);
}
```

And so on.. Javascript and Typescript has a similar points in some cases, but the paradigm is different.

Thats's a set of concise characteristics (classes, interface, generics, type, inheritance, polymorphism, encapsulations) that got the hype of Typescript, because seems like more clean, organized and good for a better code and also for its documentation maintenance through Microsoft.


**Contacts**
Email: luizcalaca@gmail.com
Instagram: https://www.instagram.com/luizcalaca
Linkedin: https://www.linkedin.com/in/luizcalaca/
Twitter: https://twitter.com/luizcalaca