teleren/devto huggingface dataset:
Intro to Software Engineering Interview Prep and System Design: Tips and Resources for Success
Tags: interview, interviewprep, swe, softwareenginer
Published: 2023-04-05 20:42:40

---
title: Intro to Software Engineering Interview Prep and System Design: Tips and Resources for Success
published: true
date: 2023-04-05 20:33:52 UTC
tags: #interview #interviewprep #swe #softwareenginer
canonical_url: https://blog.seancoughlin.me/intro-to-software-engineering-interview-prep-and-system-design-tips-and-resources-for-success
---

Take your software engineering skills to the next level with practical tips, resources, and real-world examples in my new series.

![An old computer with a keyboard and mouse generated by Dalle](https://cdn.hashnode.com/res/hashnode/image/upload/v1680705121146/0348209f-f730-488c-897e-1304b046a2bc.png)

As a software engineer, preparing for technical interviews and staying up-to-date with the latest system design techniques is crucial to staying ahead of the game and landing your next job. In this blogging series, I'm going to dive into software engineering interview preparation and system design, covering everything from foundational data structures and algorithms to more advanced distributed systems concepts.

Throughout the series, I'll be exploring a variety of Leetcode problems and discussing the most effective approaches to solving them. I'll also be sharing my favorite books and online resources for studying, providing you with the tools you need to excel in your next interview.

In addition to interview preparation, I'll also be delving into the fascinating world of system design. I'll be breaking down complex concepts and discussing real-world examples, giving you a better understanding of how to design scalable and fault-tolerant systems.

As a software engineer with a couple of years of experience, a bachelor's and a master's degree in computer science, and a general passion for all things nerdy, maybe you would expect me to be good at this stuff. In fact, I've always struggled with this side of software engineering. My goal in writing this series is to _learn in the open_. I am writing this series while I embark on my journey of learning more. I'm hoping to keep myself engaged with learning, and maybe I can teach a potential reader a thing or two as well.

You can find the series at [https://blog.seancoughlin.me/series/interview-prep](https://blog.seancoughlin.me/series/interview-prep).

Let's get started.

The image was generated using [Dalle2](https://openai.com/product/dall-e-2) and the prompt "a computer from the 90s in the style of vaporwave."

---

Originally published at https://blog.seancoughlin.me.
Criando um executor auto-hospedado com GitHub Actions
Tags: githubactions, selfhostedrunner, tutorial, automation
Published: 2023-04-05 20:18:52

## Introdução

GitHub Actions é uma ferramenta que permite automatizar fluxos de trabalho de maneira muito simples, diretamente dos repositórios do próprio GitHub. Sua versão gratuita permite o processamento de até 2000 minutos por mês em repositórios privados, compartilhando recursos de hardware. Mas é possível instalar a versão auto-hospedada no seu servidor e fazer uso ilimitado da ferramenta sem pagar nada a mais por isso. 

### Criando executor auto-hospedado

1. Acesse o repositório onde o fluxo será configurado e selecione a aba ‘*Settings*’.
    
2. Selecione a opção ‘*Actions*’ e no menu lateral e selecione a opção ‘*Runner*’, em seguida clique no botão ‘*New self-hosted runner*’ para adicionar um novo executor auto-hospedado.

3. Selecione o sistema operacional e siga as instruções para download e instalação do executor, que incluem a configuração de tokens de acesso e outras informações necessárias para a comunicação com o GitHub. 

### Configurando o executor no Linux:

> Os passos a seguir serão um resumo do passo 3 da etapa anterior, usando o sistema operacional Linux.

No seu servidor, crie o diretório onde o executor será instalado:
```bash
mkdir actions-runner && cd actions-runner
```

Baixe o pacote do GitHub Actions:

```bash
curl -o actions-runner-linux-x64-2.303.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.303.0/actions-runner-linux-x64-2.303.0.tar.gz
```

Faça a extração dos arquivos:

```bash
tar xzf ./actions-runner-linux-x64-2.303.0.tar.gz
``` 

Crie o executor:

```bash
./config.sh --url <link-do-repositorio> --token <token>
```  

Como super usuário, torne o arquivo `svc.sh` executável:

```bash
sudo chmod +x svc.sh
```

em seguida, instale o executor:
```bash
sudo ./svc.sh install
```
    
e o inicie:
```bash
sudo ./svc.sh start
```

Tudo certo! O executor está rodando em “*daemon*” e pronto para executar seus fluxos de trabalho.

Os *logs* podem ser verificados com o seguinte comando:

```bash
sudo ./svc.sh status
```

### Usando o executor nos fluxos de trabalho

Para usar o executor auto-hospedado, basta configurar o parâmetro `runs-on: self-hosted` no arquivo do fluxo de trabalho, por exemplo:

```bash
name: Seu fluxo de trabalho

on:
  push:
    branches: master

jobs:
  deploy:
    runs-on: self-hosted

    steps:
      - name: Etapa 1
        run: echo "Lero lero"
```

<br>
E isso é tudo, crie seus *workflows* e faça o máximo de proveito dessa poderosa ferramenta. Para saber mais, consulte a [documentação oficial](https://docs.github.com/pt/actions) do GitHub Actions, especialmente a seção sobre [executores auto-hospedados](https://docs.github.com/pt/actions/hosting-your-own-runners/about-self-hosted-runners).
SOLID - Os 5 princípios da Programação Orientada a Objetos
Published: 2023-04-05 20:18:34

Esses princípios, apresentados pela primeira vez por Robert J. Martin (Uncle Bob), são fundamentais para ajudar o programador a escrever códigos mais simples, limpos, legíveis e organizados que facilitam a evolução do código e manutenção. Esses fundamentos aparecem no livro 'Código Limpo' do Uncle Bob. 

**S- 'Simple Responsability Principle' (Princípio de Responsábilidade Única)**
Uma classe ou método precisa ter somente uma responsabilidade, ou seja, ter uma única tarefa ou execução.

Isso evita dificuldades para se entender o que aquela classe precisa fazer e principalmente problemas quando é necessário fazer alguma alteração. Quando uma classe/método possui muitas responsabilidades o risco de quebrar alguma função, criar algum 'bug' ou comprometer alguma outra parte é muito grande. 

Será muito mais fácil para leitura e manutenção que cada tarefa seja separada em sua classe/método/função correto.

**O - 'Open-Closed Principle' (Princípio Aberto-Fechado)**
Esse princípio fala que os Objetos e Entidades devem estar abertos para extensões mas fechados para modificações. Isso significa que precisamos ter uma entidade que caso venha a ter incrementos de novos recursos ou comportamentos, não seja necessário uma modificação de código original, evitando assim a criação de 'bugs' em um processo que já estava funcionando corretamente. 

Podemos por exemplo abstrair o contexto para uma interface, que poderá ser chamada quando necessário e independente de quantos incrementos forem sendo criados, sem precisar mexer no código original. 

**L - 'Liskov Substitution Principle' (Princípio da Substituição de Liskov)**
Uma classe derivada deve necessariamente ser substítuida por sua classe base. Para seguir com o princípio criado por Barbara Liskov, basicamente é necessário que quando tivermos uma sub-classe que por algum motivo precise sobrescrever uma função da classe mãe para funcionar corretamente, o ideal fosse ter uma classe mãe que tivesse as duas funções a serem utilizadas sem que nenhuma classe filha precisasse sobrescreve-la.

**I - 'Interface Segregation Principle' (Princípio da Segregação de Interface)**
Esse princípio fala que é melhor termos várias interfaces específicas do que uma genérica. Ou seja, o ideal é que as classes não precisem implementar interfaces que possuam métodos que não irão utilizar. 

**D - 'Dependence Invertion Principle' (Princípio da Inversão de Dependências)**
Dependa de abstrações e não de implementações. Evite que classes estejam fortemente acopladas a outras, fazendo com que qualquer alteração possa faze-la parar de funcionar. 

_Referências e exemplos para estudos: 
https://medium.com/desenvolvendo-com-paixao/o-que-%C3%A9-solid-o-guia-completo-para-voc%C3%AA-entender-os-5-princ%C3%ADpios-da-poo-2b937b3fc530
https://embarcados.com.br/solid-principios-fundamentais-para-aplicacoes-de-alto-nivel/_
Hello world!
Tags: beginners
Published: 2023-04-05 20:12:19

I imagine this title is waaaay overused for new users (though this is my first experience here so I haven't seen anything to confirm this), but I wanted to get my account out there and say hello to all of the long-time and other new users dwelling here! 

To introduce myself as a celebration to my first post: My name is Sam, I am currently 23 years old, female (she/her), I draw and do commissions as a supplement income to my primary job, and I have a special interest in Anatomy and Physiology facts! I also love to play video games, particularly anything Pokemon or Legend of Zelda.

It's a pleasure to meet you all, and I'm looking forward to posting the inner workings of my mind while I continue my journey through education in software engineering! I'm hoping this will also be a great place to hone my skills and learn how to better myself as a developer through the guiding hands of other, more experienced developers. 

Thank you all for your attention!
Konfigurasi DNS Server pada Linux
Tags: mikrotik, dns, linux, pens
Published: 2023-04-05 20:08:13

Artikel ini merupakan laporan dari Workshop Administrasi Jaringan kelas 2 D4 IT A tahun 2023 Teknik Informatika, Politeknik Elektronika Negeri Surabaya

Dosen pengampu: Dr. Ferry Astika Saputra. S.T, M.Sc.

Anggota Kelompok 8:
1. M. Roy Farchan
2. Azis Zuhri Pratomo
3. Habibie Fatahillah 

## Langkah - Langkah

1. Melakukan update dan upgarde pada linux
Hal ini dilakukan agar 
```
> sudo apt-get update
> sudo apt-get upgrade
```

2. Menginstall package **bind9** & **bind9utils**
```
> sudo apt-get install bind9 bind9utils
```


3. Melakukan konfigurasi di

Buka file named-conf, disini kami menggunakan software nano untuk mengeditnya

![Buka File named-conf](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jqooab0k1gqws5bqq5eh.png)

Mengganti konfigurasi dns server
 
![konfigurasi named-conf](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dsbqebi8hnvl4saapfwx.png)

4. Konfigurasi file forward


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



5. Konfigurasi file reverse

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

6. Konfigurasi resolve

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

7. Melakukan pengujian

Cek record forward
![forward](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rtzn4wg15m6iqhwb9zmh.png)

Cek record reverse
![Reverse](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zrw8n0i4bsk67njsj4fm.png)


## Referensi
https://guru.smkn1pacitan.sch.id/sis/2022/03/29/instalasi-dan-konfigurasi-dns-server-pada-linux-debian-11/
CDK package.json Scripts
Tags: aws, cdk, devops
Published: 2023-04-05 19:49:00

---
title: CDK package.json Scripts
published: true
description: Managing complex apps with simple package.json scripts
tags: 
  - AWS
  - CDK
  - DevOps
published_at: 2023-04-05 19:49 +0000
canonical_url: https://bliskavka.com/2023/03/02/cdk-package-scripts/
---

I found the following package.json scripts very convenient when managing a complex CDK app. The key is the `--` operator, which allows us to append additional parameters to a script.

```json
{
  "scripts": {
    "build": "tsc --noEmit",
    "cdk": "npm run build && cdk",
    "cdk:pipeline": "npm run build && cdk --app 'npx ts-node --prefer-ts-exts bin/pipeline.ts'",
    "test": "jest",
    "diff": "npm run cdk -- diff",
    "synth": "npm run cdk -- synth --quiet",
    "deploy": "npm run cdk -- deploy --all --require-approval never",
    "deploy:pipeline": "npm run cdk:pipeline -- deploy --all --require-approval never"
  }
}
```

This configuration allows us to create convenient scripts like deploy/diff/synth, but we still have the ability to pass in additional parameters like:

`npm run deploy -- --no-rollback --profile default`

I can also define multiple entry points

- `cdk`: Interact with the stack directly.
- `cdk:pipeline`: Deploy a CDK Pipeline which is able patch the CDK app when new changes are pushed.

A pipeline execution can be slow, so being able to circumvent the pipeline in a dev/sandbox environment is extremely useful.
Uma forma simples para usar Absolute Imports no React + TS + Vite
Tags: react, vite, typescript, tutorial
Published: 2023-04-05 19:12:43

Nas últimas semanas tenho participado de encontros de mentoria de ReactJS com uma turma pela [Alura Empresas](https://www.alura.com.br/empresas).

Nesses encontros criamos projetos a cada semana, normalmente usando o [Create React App](https://create-react-app.dev/), mas dessa vez começamos usando o [Vite](https://vitejs.dev/), uma alternativa bem interessante ao CRA (teremos um artigo falando mais sobre o Vite em breve). 

No decorrer da semana os alunos começaram o desenvolvimento do projeto e um dos alunos surgiu com um problema na hora de tentar usar o Absolute Import em seu projeto.
Ah, se não sabe o que é Absolute Import ou relative Import, sem desespero, teremos um artigo em breve falando sobre.

Voltando ao problema do aluno, podemos encontrar diversos artigos ou respostas no stackoverflow com possíveis soluções e foi então que encontrei um pacote que podemos instalar em nossas dependências de desenvolvimento e com poucas alterações no código e eles está funcionando perfeitamente.


### A Solução feliz!
O pacote da vez é o [vite-tsconfig-paths](https://www.npmjs.com/package/vite-tsconfig-paths).
Ele ajudou de forma prática e simples dando ao Vite a capacidade de resolver importações usando o mapeamento absoluto.


### Tá, mas como era antes?
Sem esse pacote, toda vez que fossemos importar algo em algum arquivo teríamos que fazer referencia a dependência de forma relativa ao arquivo. 

Na imagem abaixo podemos notar o import do componente Header com aqueles '../../'. Ou seja, tínhamos que 'navegar' até o arquivo saindo e entrando nas pastas. Muito chato, né?

![Import Relativo de um componente](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2jmhqvj437d3pzzw1mo9.png)

Porém com o Import Absolute resolvemos esse problema, e nossos imports ficam assim:


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

Muito mais prático, né?

Então vamos parar de enrolação e vamos aprender como instalar e configurar o pacote vite-tsconfig-paths.

### Bora pra mão na massa!

Primeira coisa que temos que fazer é instalar o pacote em nossas dependências de desenvolvimento:
`npm i --save-dev vite-tsconfig-paths`

Após isso temos que adicionar o plugin no arquivo **vite.config.ts**:

![ajuste no vite.config.ts](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jcxu5xtqvzduayqhdisf.png)



E por ultimo, definir no arquivo **tsconfig.json** a url base do projeto dentro do objeto compilerOptions:


![ajuste no tsconfig.json](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vavlrxgig49qhr343uuo.png)

E com esses três passos nosso projeto já esta pronto para trabalhar com as Importações Absolutas. Só rodar o código e ser feliz!!!


TAMO JUNTO!!!
Oleg Ponomar
Published: 2023-04-05 17:42:54

Oleg is truly a professional and objective observer of political events. His analyses and reviews of events have a high level of expertise and objectivity, which allows him to be trusted and respected both by his subscribers and by other experts and journalists in the field [https://www.ponomaroleg.com/](https://www.ponomaroleg.com/).

Oleg Ponomar has a huge audience of fans and subscribers, more than 180,000 people, from the Facebook community, which testifies to the high appreciation of his work and ability to to draw attention to important topics. His posts and analyses are often discussed in the Ukrainian media and blogs, as well as in other countries.

Oleg Ponomar is not afraid to express his opinion and position on difficult issues, but he always tries to be objective and provide his subscribers a complete picture of what is happening to his subscribers. He uses his experience and knowledge to help people understand complex political events and make informed decisions.

Oleg Ponomar is not only a professional and objective observer of political events, but also a unique teacher who is able to explain 
complex things in simple language.  His logic and methodology of teaching the understanding of geopolitics is admirable in its simplicity and inspires respect.

Reading his posts, commentaries and reviews of political developments is like taking a sip of clean water in a time of thirst.  He always tries to provide his readers with a full and objective picture of what is happening, which helps them make informed decisions.  His reports often make people feel confident about the future of Ukraine and the nation, because Oleg knows how to explain complicated things in such a way that tinsel falls away,  and eyes are opened to new opportunities and perspectives.
When to use Graph Databases?
Published: 2023-04-05 18:56:01

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

Being multi-relational by nature, Graph Databases are opposed to relational ones, which have loosely affiliated tables.

Navigating relationships is quick because they are already stored in the database and don’t need to be calculated. Data is saved in the same way that thoughts are scribbled on board.

The information is stored, thus letting you conceive and use it in a variety of ways. In contrast, relational databases can’t handle the quantity, pace, and diversity of current data spreading.

Acknowledging ways for NoSQL databases to address these issues is merely the first step in determining which database is best for your business.

Considering the fact that there are a variety of database approaches, and available tools for each of them, searching for the right solution could be tough.

But if the ranking by the types of databases could somehow help you to decide, you can find it here.

Graph databases are anticipated to surpass other types of databases, especially the still-dominant relational database. Even though they are not suitable for each and every app idea.

A graph database is suitable for any environment that enables social networking. This concept may be applied to any project where you’d have to find out people’s behaviour in order to suggest new offerings for them.

Besides, these types of databases enable to define the shortest route between entities.

Hence, they are commonly used for social networks, platforms with communities, logistics, and spatial dimensions (for example, in real-time maps, flight booking platforms, or Transportation Management Systems).

Tech giants like Google, Facebook, LinkedIn and PayPal all tapped into the power of graph databases to create booming businesses. Their secret? They each used graph database technology to harness the power of data connections.

A graph database is purpose-built to handle highly connected data, and the increase in the volume and connectedness of today’s data presents a tremendous opportunity for sustained competitive advantage.

References:
[Apache AGE](https://age.apache.org/)
[Apache AGE Github](https://github.com/apache/age)
Alas... Tetris
Tags: javascript, gamedev, devjournal
Published: 2023-04-05 18:43:12

Hey! Do you remember in [my last post](https://dev.to/tjstoll/game-development-4ehd), I mentioned I was working on Tetris? Well, here it is:

![screenshot of Tetris game](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sk5bbcvc2ghxoqy2peph.png)

You can find it on my [Code Pen](https://codepen.io/tjstoll/pen/oNPJoOJ) or [GitHub](https://github.com/tjstoll/miniProjects/tree/main/tetris/scratchFiles)!

- The code is a mess
- It's a little janky (as the subtitle suggests)
- Controls for mobile are a sham

But for the most part it's playable!

I used pure JavaScript because I'm too lazy to learn any library or framework. But, honestly, I like it better this way! Part of the fun of coding is figuring out the logic and putting together a solution that works. And there were many times it did not work... But when it did, the satisfaction was unmatched!

This is a big achievement for me in my game development journey. And despite being lazy, what better way to celebrate than to learn an actual game engine like Phaser JS or Unity?

To Be Continued...
Why Side Projects are Essential for Software Developers
Tags: sideprojects, saas, sideincome, layoffs
Published: 2023-04-05 18:35:36

---
title: Why Side Projects are Essential for Software Developers
published: true
description: 
tags: sideproject, saas, sideincome, layoffs
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
# published_at: 2023-04-05 17:13 +0000
---
🚀Why Side Projects are Essential for Software Developers🚀

Layoffs are real, You need to get real too.

It's time for software developers to diversify their income streams. 📉💼

(Before going into details, stay tuned as I am releasing a revised step-by-step 30-Day action plan, if you are tinkering around with some ideas) 
---

Ok back to the topic

Side projects not only provide an additional source of income but also offer an opportunity to 

1) Expand your skillset
2) Build your portfolio
3) Network and collaborate and 
4) Stay relevant in the ever-changing tech landscape. 💡🛠️

Here are 4 key reasons why software developers should consider building side projects:

1️⃣ Income Stability 💵🔒: 

Side projects can help you achieve financial strength during uncertain times. 

Even a small amount of extra income can make a huge difference when faced with layoffs. 
---

2️⃣ Skill Development 👩💻🌟: 

Working on different projects allows you to explore new technologies and sharpen your existing skills. 

This continuous learning will make you a more attractive candidate in the job market.
---

3️⃣ Networking Opportunities 🤝🌐: 

Side projects often lead to collaborations with like-minded individuals

That helps you expand your professional network and opens doors to future opportunities. 
---

4️⃣ Entrepreneurial Spirit 🚀🌕: 

Developing a side project can be the first step toward building your own business or startup. 

Who knows, your side project might turn into your full-time gig! 

So, let's start building those side projects, fellow developers! 

Share your ideas and experiences in the comments below, and let's support each other in these challenging times. 💪🔧

#job #developer #layoffs