teleren/devto huggingface dataset:
5 Reasons Why GraphQL is the Future of API Development
Tags: webdev, api, graphql
Published: 2023-02-09 03:45:25

## Introduction:
API development is a crucial aspect of modern web development, as it allows communication between the frontend and the backend. Over the past few years, the popularity of GraphQL has skyrocketed, making it one of the most talked about topics in the tech industry. In this blog post, we will discuss five reasons why GraphQL is the future of API development.

1. Flexibility: GraphQL offers a highly flexible approach to API development, as it allows developers to request exactly the data they need. This means that the client can specify exactly what information it requires, resulting in a more efficient and effective API.

2. Ease of use: GraphQL is incredibly easy to use, as it eliminates the need for multiple round trips to the server. This results in a much simpler and faster API, as well as reducing the amount of code required to make API calls.

3. Strong type system: GraphQL has a strong type system that allows developers to define the structure of the data being transmitted between the client and server. This type system helps catch potential errors early in the development process, reducing the likelihood of bugs and unexpected behavior.

4. Improved performance: With GraphQL, clients are able to fetch multiple resources in a single request, as opposed to multiple requests in traditional REST APIs. This can greatly improve performance and reduce server load, especially in cases where a lot of data is needed.

5. Growing community: GraphQL has a growing and passionate community of developers, who are constantly contributing to its development and improvement. With a large number of companies and projects already using GraphQL, it has a bright future and is here to stay.

## Conclusion:
In conclusion, GraphQL offers numerous benefits over traditional REST APIs, including greater flexibility, ease of use, a strong type system, improved performance, and a growing community of developers. As the technology continues to evolve and mature, it's likely that we'll see an even greater adoption of GraphQL in the future. If you haven't already, it's time to start exploring the benefits of GraphQL and see how it can improve your API development process.
2306. Leetcode Solution in cpp
Tags: cpp
Published: 2023-02-09 03:21:54

==============================================================
#Description:
You are given an array of strings ideas that represents a list of names to be used in the process of naming a company. The process of naming a company is as follows:

Choose 2 distinct names from ideas, call them ideaA and ideaB.
Swap the first letters of ideaA and ideaB with each other.
If both of the new names are not found in the original ideas, then the name ideaA ideaB (the concatenation of ideaA and ideaB, separated by a space) is a valid company name.
Otherwise, it is not a valid name.
Return the number of distinct valid names for the company.

 

Example 1:

Input: ideas = ["coffee","donuts","time","toffee"]
Output: 6
Explanation: The following selections are valid:
- ("coffee", "donuts"): The company name created is "doffee conuts".
- ("donuts", "coffee"): The company name created is "conuts doffee".
- ("donuts", "time"): The company name created is "tonuts dime".
- ("donuts", "toffee"): The company name created is "tonuts doffee".
- ("time", "donuts"): The company name created is "dime tonuts".
- ("toffee", "donuts"): The company name created is "doffee tonuts".
Therefore, there are a total of 6 distinct company names.

The following are some examples of invalid selections:
- ("coffee", "time"): The name "toffee" formed after swapping already exists in the original array.
- ("time", "toffee"): Both names are still the same after swapping and exist in the original array.
- ("coffee", "toffee"): Both names formed after swapping already exist in the original array.
Example 2:

Input: ideas = ["lack","back"]
Output: 0
Explanation: There are no valid selections. Therefore, 0 is returned.
 

Constraints:

2 <= ideas.length <= 5 * 104
1 <= ideas[i].length <= 10
ideas[i] consists of lowercase English letters.
All the strings in ideas are unique.
==============================================================
#Solution:
```cpp
class Solution {
 public:
  long long distinctNames(vector<string>& ideas) {
    long long ans = 0;
    // group strings by initials
    vector<unordered_set<string>> suffixes(26);

    for (const auto& idea : ideas)
      suffixes[idea[0] - 'a'].insert(idea.substr(1));

    for (int i = 0; i < 25; ++i)
      for (int j = i + 1; j < 26; ++j) {
        int count = 0;
        for (const auto& suffix : suffixes[i])
          if (suffixes[j].count(suffix))
            ++count;
        ans += 2 * (suffixes[i].size() - count) * (suffixes[j].size() - count);
      }

    return ans;
  }
};

```
==============================================================
#leetcode
#challenge
Here is the link for the problem:
https://leetcode.com/problems/naming-a-company/
O que é PCI DSS?
Tags: veracode, beginners, pci, security
Published: 2023-02-09 03:00:00

PCI DSS significa "Padrão de Segurança de Dados do Cartão de Pagamento". É um conjunto de regras e requisitos de segurança para empresas que processam, transmitem ou armazenam informações de cartão de pagamento. O PCI DSS é mantido e administrador pela PCI Security Standards Council, uma organização sem fins lucrativos formada por cinco das principais marcas de cartões de pagamento: American Express, Discover Financial Services, JCB International, Mastercard e Visa Inc.

O objetivo do PCI DSS é ajudar a garantir a segurança dos dados sensíveis dos cartões de pagamento, evitando fraudes e roubo de informações. As empresas que processam informações de cartão de pagamento são obrigadas a seguir os requisitos do PCI DSS, e as empresas que não cumprem esses requisitos correm o risco de sofrer multas e prejudicar a reputação do negócio.

Os requisitos do PCI DSS incluem medidas de segurança técnicas, como criptografia de dados sensíveis, autenticação forte, monitoramento de segurança contínuo e gerenciamento de vulnerabilidades, bem como práticas de segurança de processos, como treinamento de pessoal, controle de acesso a dados sensíveis e gerenciamento de incidentes de segurança.

Para saber como a Veracode e a M3Corp podem lhe ajudar em seu programa de segurança, entre em [contato](https://www.m3corp.com.br/contato/).
O que é CVSS?
Tags: veracode, beginners, tutorial, security
Published: 2023-02-09 03:00:00

CVSS é a sigla para "Common Vulnerability Scoring System" ou "Sistema de Pontuação de Vulnerabilidade Comum". É uma metodologia padronizada para classificar a gravidade de vulnerabilidades de segurança em software e sistemas de informação.

A classificação de gravidade é baseada em uma série de fatores, incluindo o tipo de vulnerabilidade, o impacto potencial na confidencialidade, integridade e disponibilidade dos dados, e a facilidade de exploração da vulnerabilidade. Esses fatores são combinados para produzir uma pontuação de gravidade numérica, que varia de 0 a 10.

O CVSS é amplamente utilizado na indústria de segurança de TI para avaliar a gravidade de vulnerabilidades e priorizar as correções necessárias. Além disso, o CVSS é compatível com muitos padrões e normas de segurança, como NIST SP 800-63 e ISO/IEC 29147.

A utilização de uma metodologia padronizada de classificação de vulnerabilidades, como o CVSS, permite uma avaliação objetiva da gravidade de vulnerabilidades e ajuda a melhorar a eficiência e a eficácia do gerenciamento de segurança.

Para saber como a Veracode e a M3Corp podem lhe ajudar em seu programa de segurança, entre em [contato](https://www.m3corp.com.br/contato/).
O que é SBOM?
Tags: veracode, beginners, tutorial, security
Published: 2023-02-09 03:00:00

SBOM é a sigla para "Software Bill of Materials", que é uma lista de todas as partes e componentes de software utilizados em um produto de software. Ele inclui informações sobre versões, autores, licenças e vulnerabilidades conhecidas das bibliotecas e componentes de terceiros incluídos no software. O objetivo é fornecer transparência e rastreabilidade para ajudar a garantir a segurança e a conformidade do software.

**Qual a importância dele?**
O SBOM é importante por vários motivos:
- **Segurança**: O SBOM fornece informações sobre vulnerabilidades conhecidas de componentes de software, permitindo que as equipes de segurança tomem medidas para corrigi-las antes que sejam exploradas por atacantes.
- **Conformidade regulatória**: Algumas regulamentações, como a LGPD e a norma PCI DSS, exigem que as empresas mantenham registros detalhados sobre as partes de software utilizadas em seus sistemas. O SBOM ajuda a atender a essas obrigações.
- **Melhoria da qualidade do software**: O SBOM ajuda as equipes de desenvolvimento a ter uma visão completa das partes de software utilizadas em um produto, facilitando a identificação de componentes obsoletos ou com licenças incompatíveis.
- **Transparência**: O SBOM permite que as empresas demonstrem transparência e responsabilidade aos seus clientes e stakeholders, mostrando o que está incluído em seus produtos de software.

Em resumo, o SBOM é importante para garantir a segurança, a conformidade regulatória e a qualidade do software, além de aumentar a transparência e a confiança dos clientes e stakeholders.

Para saber como a Veracode e a M3Corp podem lhe ajudar em seu programa de segurança, entre em [contato](https://www.m3corp.com.br/contato/).
O que é CWE?
Tags: veracode, beginners, cwe, security
Published: 2023-02-09 03:00:00

CWE é a sigla para "Common Weakness Enumeration" ou "Enumeração de Fraquezas Comuns". É uma taxonomia aberta e ampla de falhas de segurança em software, criada com o objetivo de identificar, classificar e documentar as vulnerabilidades mais comuns no software.

Mantido pela Mitre Corporation, uma organização sem fins lucrativos dedicada à pesquisa e desenvolvimento de soluções de segurança de tecnologia da informação, o CWE é amplamente utilizado em todo o setor de segurança de TI, incluindo empresas, governos e grupos de pesquisa, como uma referência comum para identificar e discutir vulnerabilidades de segurança.

A estrutura é projetada para ser ampla e flexível, cobrindo uma ampla gama de categorias de vulnerabilidades, desde erros de programação até problemas de design e arquitetura. Além disso, o CWE fornece uma documentação detalhada sobre cada vulnerabilidade, incluindo descrições, exemplos e referências adicionais.

O CWE é amplamente utilizado como uma base de conhecimento para ajudar a prevenir e corrigir vulnerabilidades de segurança no software, e é compatível com muitos outros padrões e práticas de segurança, como OWASP Top 10 e a norma ISO/IEC 29147.

Para saber como a Veracode e a M3Corp podem lhe ajudar em seu programa de segurança, entre em [contato](https://www.m3corp.com.br/contato/).
O que é Pentest?
Tags: veracode, beginners, tutorial, security
Published: 2023-02-09 03:00:00

Pentest é a abreviação para "Teste de Penetração". É um processo de segurança de informação que envolve simular uma ameaça de segurança para identificar vulnerabilidades no sistema ou na aplicação que possam ser exploradas por um atacante. O objetivo do Pentest é identificar pontos fracos e corrigi-los antes que um atacante possa explora-los.

Pentest é realizado por profissionais de segurança da informação que usam ferramentas, técnicas e conhecimento especializado para simular ameaças de segurança. Eles procuram por falhas de segurança que possam ser exploradas para acessar dados confidenciais, causar danos ao sistema ou interromper o funcionamento normal da aplicação.

Pentest é uma parte importante de uma abordagem de segurança de informação completa, pois permite identificar vulnerabilidades antes que elas possam ser exploradas. Ao realizar pentests regulares, as organizações podem garantir que seus sistemas e aplicações estejam protegidos contra ameaças de segurança conhecidas e desconhecidas.

**Como uma solução DAST pode ajudar nele?**
DAST é a abreviação de "Teste de Aplicação Dinâmico". É uma ferramenta de teste de segurança que verifica a aplicação enquanto ela está em execução, procurando por vulnerabilidades de segurança. Diferentemente de outros tipos de testes de segurança, como os testes estáticos (SAST), que analisam o código fonte da aplicação, o DAST verifica a aplicação em tempo real, enquanto ela está sendo usada pelos usuários finais.

Um DAST pode ser usado como uma ferramenta complementar ao Pentest, pois ele permite identificar vulnerabilidades de segurança que possam ser exploradas por um atacante durante o uso normal da aplicação. Algumas das vulnerabilidades que um DAST pode identificar incluem:
- **Injeção de SQL**: Verifica se a aplicação está protegida contra injeções de SQL, que podem permitir a um atacante acessar dados confidenciais.
- **Cross-Site Scripting (XSS)**: Verifica se a aplicação está protegida contra ataques de XSS, que podem permitir a um atacante injectar código malicioso na página da aplicação.
- **Cross-Site Request Forgery (CSRF)**: Verifica se a aplicação está protegida contra ataques de CSRF, que podem permitir a um atacante realizar ações maliciosas em nome de outro usuário.
- **Outras vulnerabilidades de segurança**: Além dessas vulnerabilidades comuns, um DAST também pode identificar outras vulnerabilidades de segurança, como falhas de autenticação e autorização, que possam ser exploradas por um atacante.

Em resumo, um DAST pode ser útil em um Pentest porque permite identificar vulnerabilidades de segurança que podem ser exploradas durante o uso normal da aplicação. Ao usar um DAST como ferramenta complementar ao Pentest, as organizações podem ter uma visão mais completa da segurança de sua aplicação.

Para saber como a Veracode e a M3Corp podem lhe ajudar em seu programa de segurança, entre em [contato](https://www.m3corp.com.br/contato/).
SFTP utilizing FireZilla
Tags: linux, bash
Published: 2023-02-09 02:54:50

## Introduction

There are different ways to transfer files within different systems and servers. I will be doing a short hands-on using `FireZilla`, an open-source ftp application.

## SFTP

SSH File Transfer Protocol is just a more secure version of FTP. It’s also commonly called Secure File Transfer Protocol. For more details on SFTP and FTP and its differences, please refer to this <a href= "https://kinsta.com/knowledgebase/ftp-vs-sftp/">article</a>


## Demo

> I will be using a Linux system(CentOS7) and a Windows client PC in the same network (192.168.1.0/24) inside a VMWare workstation

First we need the `FireZilla` application installed in the client


![Firezilla install](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mygfkiumdutjfh6eh76q.png)



After the installation, we can open the app and navigate to File -> Site management


![new site](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uuqsdmapx1wdkxwa4h0v.png)

In here I created a new site named 'Linux-1'


![new site](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ebqn1gc42ds33nj8smsw.png)

In the configuration for this 'site',


![Config](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o19xcdt3yypkk3we29rh.png)

*I basically entered the IP address for the Linux and the user name while setting the 'ask password' method for login. Also set the protocol as `SFTP`*

After clicking on 'Ok', the app will ask for the user password

![Password enter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jdpz8ki9znf55aibnbna.png)

A message should appear that says that the connection to the 192.168.1.128 was successful + show us contents under `/root`


![Situation](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/79v9eotbbi0pd51d327y.png)

The main screen will show all of the files & directories under /root on the right and shows everything on our client PC on the left

On the Left,

![Left](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/am963wj8cry5o3t65r91.png)

On the right,

![Right](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b8q6w46ef9bto6hrtfxv.png)

We can easily drag and drop the "Tests.txt" from the Windows Client to the Linux System

From Windows
![Test](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z9g4lene2zuzjjf8ox5v.png)

To Linux
![Linux](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rs5rglmgwj91bllkkqwm.png)
Social Media Side Effects | 6 Negative Effects
Tags: tutorial, webdev
Published: 2023-02-09 02:23:56


![Social Media Side Effects](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y0tlmp5o1yhqwa7cr4t6.jpg)
Social media has become an integral part of our daily lives, providing an easy way to stay connected with friends and family, stay informed about current events, and even make new connections. However, despite its many benefits, social media also has a dark side.

One of the most significant side effects of social media side effects is its impact on mental health. Studies have shown that excessive social media use can lead to feelings of anxiety, depression, low self-esteem, and even addiction. This is because social media often creates unrealistic expectations of perfection and success, and can make individuals feel like they’re falling short in comparison to others.

## Top 6 Negative Social Media Side Effects

Negative Side Effect:

1. Fear of Missing Out (FOMO)
2. Unrealistic Expectations
3. Anxiety & Depression
4. Cyberbullying
5. General Addiction
6. Unhealthy sleep patterns

Social media has also been linked to decreased attention spans, as well as a decline in face-to-face communication and interpersonal skills. People are becoming more comfortable with communicating through screens and less comfortable with real-life social interactions.

I shared this post from [Social Media Side Effects](https://softcodeon.com/social-media/social-media-side-effects.htm) you can read in detail from there.

I hope you like this post. If you have any question please discuss below help to improve. Thank you.
Copying files amongst Linux Servers
Tags: linux, bash
Published: 2023-02-09 01:58:12

## Introduction

We are aware that the `cp` command works for copying a file or a directory in Linux systems. However what if we want to copy something from one Linux system to another connected in the same network? 

## SCP

`scp` or (secure copy) command helps us copy files between Linux systems in a secure way as it uses SSH to get and send data

---

## Demo

> I will be using 2 Linux systems(CentOS7) in the same network (192.168.1.0/24) inside a VMWare workstation

So the basic syntax would look like:
```bash
scp [source file] <username>@<destination IP>:[destination dir]
```

Before starting the demo, I will be creating 2 users and add them into the same group on the receiving end (I will call this Linux-2 from now)
```bash
groupadd scp_group
useradd s1
useradd s2
usermod -G scp_group s1
usermod -G scp_group s2
```

Editing the ownership and permissions for the new `/test`directory 
```bash
mkdir /test

chown .scp_group /test
chmod 755 /test
ls -ld /test
drwxrwxr-x 2 root scp_group 6 Feb  9 09:47 /test
```
*This is done so that we can actually copy files into this directory from Linux-1 without getting any permission errors*

From Linux-1, I will use the `scp` command to copy a demo file
```bash
scp /scp/A s1@192.168.1.129:/test
s1@192.168.1.129's password: 
A                                                                                                              100%    0     0.0KB/s   00:00 
```
*notice that it asks for the password. We can just press 'enter' if we didn't set any*

Doing the same for another file
```bash
scp /scp/B s2@192.168.1.129:/test
s2@192.168.1.129's password: 
B                                                                                                              100%    0     0.0KB/s   00:00    
```

If we check the `/test` directory on Linux-2,
```bash
ll /test
total 0
-rw-r--r-- 1 s1 s1 0 Feb  9 09:54 A
-rw-r--r-- 1 s2 s2 0 Feb  9 09:58 B
```

We can also 'pull' a specific file from Linux-1 within Linux-2,
```bash
scp 192.168.1.128:/scp/C /test
root@192.168.1.128's password: 
C                                                                                                    100%    0     0.0KB/s   00:00
```

If we check now
```bash
ll /test
total 0
-rw-r--r-- 1 s1   s1   0 Feb  9 09:54 A
-rw-r--r-- 1 s2   s2   0 Feb  9 09:58 B
-rw-r--r-- 1 root root 0 Feb  9 10:02 C
```
---

> 👉 Important note that when I copied from Linux-1 I used 's1' username and 's2' username for A and B files respectively. That made the ownership to be for their respective file in Linux-2. Whereas when 'pulling' a file from Linux-2, it just makes the ownership for the file C to be 'root' as I worked as the root user in both servers
TCP의 3대 제어
Tags: network, tcp, rfc9293
Published: 2023-02-09 01:48:54

## 기본개념
* 송신버퍼
* 수신버퍼
* 윈도우
	* 송신 윈도우 변수
		* 슬라이딩 윈도우
	* 수신 윈도우 변수
	* 혼잡 윈도우 변수
	* 윈도우 알고리즘
		* Go-Back-N(GBN) 알고리즘
		* Selective-Repeat(SR) 선택적 반복 알고리즘
		* GBN, SR 혼합 알고리즘

ㅇ 전송 플로우
> 1. Process -> TCP 송신 버퍼(push)
> 2. TCP 송신 버퍼는 수신 버퍼 윈도우와 혼잡 윈도우 변수를 통해 계산후 TCP 수신 버퍼로 확인 응답 없이 보낼 수 있을 만큼 데이터를 보낸다.
> 3. TCP 수신 버퍼는 수신된 데이터를 보유하고 있다가, 프로세스에서 수신할 준비가 되면 데이터를 당김(pull)에 의해 소비, 그에 따라 수신 윈도우도 변경

## 흐름제어
ㅁ 소비될 수 있을 만큼만 생산자가 보내주기 위해
  왜? 수신측의 버퍼 오버 플로우로 인한 패킷 손실 우려

* 수신 윈도우 변수(rwnd)에 의해 결정
* 수신 버퍼가 얼마나 데이터를 받을 수 있는지 알려줄때 사용하는 변수
* DATA를 생산하는 Proc, 소비 Proc 간의 속도가 다르기 때문에, 안정적인 TCP 통신을 위해서 수신측에서 상황을 통보
* 송신측 흐름제어를 위한 윈도우
	* rwnd(Receive Window, 수신 윈도우 변수)
	* cwnd(Congestion Window, 혼잡 윈도우 변수)
	* awnd(Actual Window, 송신 윈도우 변수) : 수신측의 확인 응답 없이, 한번에 전달 할 수 있는 바이트 사이즈
	* awnd = min(rwnd, cwnd)
* 네이글 알고리즘 : 네트워크망의 혼잡을 피하기 위해 설계(예외적인 상황에서 오버헤드의 가능성이 있다는 단점도 존재)

## 혼잡제어
ㅁ 공유자원인 네트워크망의 혼잡을 악화시켜 통신에 충돌이 나게 하는 것을 줄이고, 한정된 자원을 잘 분배하여 원활히 돌아갈 수 있도록 제어
  (e.g. 고속도로의 혼잡을 완화시키기 위해, 차량 5부제 등의 제도를 시행)

* 혼잡 윈도우 변수(cwnd)를 어떻게 계산하고 설정할 것인가에 대한 고찰.
* cwnd(Congestion Window, 혼잡 윈도우 변수)
	* 송신 윈도우를 계산하기 위한 변수
	* MSS(Maximum Segment Size)를 기준
		* 세그먼트가 데이터를 가질 수 있는 최대의 크기를 뜻함
		* MSS = MTU - (IP헤더길이 +IP옵션길이) - (TCP 헤더길이 + TCP옵션길이)
		* IPv4(1460 Bytes), IPv6(1400 Bytes) 각각 다름
		* cwnd = 1 // MSS * 1 (IPv4 기준, 1460 Bytes)
		* cwnd = 2 // MSS * 2 (IPv4 기준, 2920 Bytes)
* 수신 윈도우가 크더라도 혼잡 윈도우 변수가 작으면 송신 윈도우 크기는 작음
* 혼잡 윈도우 변수는 혼잡 정책에 의해 증가되고 감소됨
* TCP Reno 혼잡제어 알고리즘(그나마 쉬움 (그래도 어려움😥))
	* 혼잡 감지 : 혼잡을 어떻게 추측하고 감지할 것인가?
	* 혼잡 윈도우 변수(cwnd)
	* 느린 시작 임계점 변수(ssthresh - Slow Start Thresold) : 느린 시작 상태에서 혼잡 상태로 변경하는 임계점 변수
	* 혼잡 정책 : 어떻게 예방하고, 발생하면 어떻게 대처할 것인가
* 기타 알고리즘들
	* TCP Tahoe and Reno
	* TCP Vegas
	* etc..

## 오류 제어
ㅁ 신뢰성 프로토콜이라고 불리는 TCP의 핵심 개념
	ㅇ 훼손된 패킷을 감지 및 폐기(수신자)
	ㅇ 중복 수신 된 패킷은 확인 후 폐기(수신자)
	ㅇ 분실 된 패킷이 도착할 때까지 순서에 맞지 않는 세그먼트를 버퍼에 저장(수신자)
	ㅇ 손실 되거나 제거된 패킷을 확인 후 재 전송(송신자)

* 검사합(CheckSums) : 훼손 여부 확인
* 확인응답(Acknowledgment) : 세그먼트 수신을 알려주기 위해 확인 응답
* 타임아웃(Time-Out) : 송신 TCP는 연결당 재전송 타임아웃(RTO, retransmission timeout) 타이머를 사용 하여 패킷의 재전송 시기 가늠