anúncios

quinta-feira, 17 de agosto de 2023

Conhecendo o FlexJobs

No cenário em constante evolução do mercado de trabalho, a busca por flexibilidade se tornou uma prioridade para muitos profissionais. O surgimento e a crescente popularidade de plataformas como o FlexJobs têm desempenhado um papel crucial em conectar trabalhadores a oportunidades de emprego que oferecem essa tão desejada flexibilidade.

O FlexJobs é um site dedicado a reunir oportunidades de emprego que permitem diferentes níveis de flexibilidade, incluindo trabalho remoto, meio período, horários alternativos e freelancing. Fundado para atender às necessidades de pessoas que buscam uma abordagem mais equilibrada entre a vida profissional e pessoal, o site ganhou destaque por simplificar o processo de encontrar empregos que se encaixam nesse novo paradigma de trabalho.

Uma das características mais distintivas do FlexJobs é seu compromisso com a qualidade das vagas listadas. A equipe do site realiza uma triagem criteriosa, verificando a legitimidade das empresas e das oportunidades de trabalho. Isso é especialmente valioso em um cenário onde golpes e anúncios enganosos podem ser comuns em plataformas menos confiáveis.

Para os empregadores, o FlexJobs também se mostrou uma ferramenta valiosa. As empresas que desejam atrair talentos altamente qualificados, mas que também valorizam a flexibilidade, podem listar suas vagas no site. Isso cria um ambiente onde a qualidade e a autenticidade são prioridades, beneficiando tanto os empregadores quanto os candidatos.

Além disso, o FlexJobs oferece recursos adicionais que auxiliam os usuários a navegar pelo processo de busca de emprego flexível. Isso inclui artigos informativos, guias de carreira e dicas para otimizar a busca por oportunidades. Esses recursos não apenas capacitam os candidatos a encontrarem empregos adequados às suas necessidades, mas também ajudam a moldar a conversa em torno do trabalho flexível e de suas nuances.

No entanto, é importante notar que, embora o FlexJobs seja altamente elogiado por muitos, ele também possui uma assinatura paga para acesso completo às oportunidades. Essa abordagem visa sustentar a qualidade do serviço prestado, mas pode ser um fator limitante para algumas pessoas.

Em um mundo onde a tecnologia tem impulsionado mudanças significativas na forma como trabalhamos, o FlexJobs emerge como uma resposta direta à crescente demanda por flexibilidade no mercado de trabalho. Seu papel na simplificação da busca por oportunidades de emprego flexíveis, juntamente com sua ênfase na qualidade e autenticidade das vagas, o torna uma ferramenta valiosa para profissionais e empregadores que buscam um futuro mais flexível e equilibrado.

Referência

https://www.flexjobs.com/

Feito!

quarta-feira, 16 de agosto de 2023

Entendendo o funcionando do Docker por debaixo dos panos

Por baixo dos panos, o Docker é construído sobre várias tecnologias do kernel do Linux, incluindo namespaces, cgroups, UnionFS e outras ferramentas para permitir o isolamento e gerenciamento eficiente de containers.

Namespaces:

Os namespaces permitem isolar recursos do sistema, como processos, rede, sistema de arquivos, entre outros. Cada container Docker é criado em um conjunto de namespaces, o que garante que os processos em um container não possam ver nem interagir com processos fora dele.

Os principais namespaces usados pelo Docker são: PID (para isolar processos), NET (para isolar a rede), MNT (para isolar o sistema de arquivos), UTS (para isolar o hostname), IPC (para isolar a comunicação interprocesso) e USER (para isolar os IDs de usuário).

Cgroups (Control Groups):

Os cgroups permitem limitar, contabilizar e isolar o uso de recursos, como CPU, memória, E/S de disco e rede, para grupos de processos. O Docker usa cgroups para garantir que os containers tenham uma cota de recursos definida, evitando que um container consuma todos os recursos do sistema.

Com cgroups, o Docker pode controlar e distribuir recursos entre diferentes containers de forma justa e previsível.

UnionFS:

O UnionFS é usado para criar um sistema de arquivos em camadas dentro de um container Docker. Ele permite que diferentes camadas (imagens) sejam empilhadas para formar o sistema de arquivos completo do container.

Cada camada representa alterações ou adições ao sistema de arquivos. Isso permite que múltiplos containers compartilhem camadas de imagem idênticas, economizando espaço em disco e facilitando o gerenciamento de imagens.

Docker Daemon e Cliente:

O Docker funciona em um modelo cliente-servidor, onde o Docker Daemon é o servidor e o Docker Cliente é a interface pela qual os usuários interagem com o Docker.

O Docker Daemon é responsável por gerenciar os containers, imagens, volumes e redes. Ele é responsável por criar, iniciar, parar e destruir containers, bem como gerenciar o ciclo de vida das imagens.

O Docker Cliente é uma CLI (Interface de Linha de Comando) que permite aos usuários enviar comandos para o Docker Daemon. O Cliente envia as solicitações para o Daemon, que as processa e executa as ações necessárias.

Docker Image e Container:

Uma Docker Image é uma estrutura de arquivos somente leitura usada para criar containers. Uma imagem contém o sistema de arquivos raiz e as configurações necessárias para executar um aplicativo. Ela é composta por uma ou mais camadas de UnionFS, onde cada camada é uma modificação ou adição em relação à camada anterior.

Um Docker Container é uma instância em execução de uma imagem. É um ambiente isolado que contém um sistema de arquivos que deriva da imagem, juntamente com um conjunto de processos que estão sendo executados.

Quando você executa um container Docker, o Docker Daemon utiliza as tecnologias do kernel mencionadas (namespaces, cgroups e UnionFS) para criar o ambiente isolado para o container. A partir da imagem base, ele cria uma camada de sistema de arquivos (layer) somente leitura e, em seguida, adiciona uma camada somente leitura para os arquivos do sistema de arquivos do container. A partir daí, ele cria uma camada de escrita para quaisquer alterações feitas no sistema de arquivos durante a execução do container.

Esse modelo de camadas permite que os containers sejam leves e eficientes, compartilhando recursos sempre que possível e tornando o processo de criação e distribuição de containers mais rápido e fácil.

Criando um container sem o Docker, utilizando apenas os recursos de namespaces, cgroups e o utilitário chroot.

Após entendermos a teoria do funcionamento do Docker, agora vamos criar um container sem Docker, utilizando os recursos de namespaces, cgroups e o chroot.

No GNU/Linux Debian ou Ubuntu, segue:

sudo apt update

sudo apt install debootstrap -y

mkdir /mnt/debian

sudo debootstrap stable /mnt/debian http://deb.debian.org/debian

Para visualizar os arquivos da imagem Debian que foi criado pelo pacote debootstrap.

ls -la /mnt/debian

chroot /mnt/debian /bin/bash

A partir desse momento está no outro SO que foi instalado com a imagem do Debian com debootstrap

cat /etc/debian_version

cat /etc/issue

exit

Agora vamos fazer o isolamento de processos da imagem minialista do Debian criada com debootstrap com o comando seguinte:

unshare --mount --uts --ipc --net --pid --user --map-root-user --fork --uts --ipc chroot /mnt/debian /bin/bash

mount -t proc proc /proc

ps -ef

Outra aba do terminal

ps aux | grep bash

Identificar o PID do bash

sudo chroot debian bash

apt update

apt install stress

exit

unshare --mount --uts --ipc --net --pid --user --map-root-user --fork --uts --ipc chroot /mnt/debian /bin/bash

mount -t proc proc /proc

mount -t sysfs sys /sys

mount -t tmpfs tmp /tmp

ps -ef

Na máquina física

sudo apt install cgroup-tools

sudo cgcreate -g memory,cpu,blkio,freezer,devices:/nome-grupo

cat /sys/fs/cgroup/memory/nome-grupo

cgclassify -g memory,cpu,blkio,freezer,devices:nome-grupo PID(bash-criado-pelo-unshare)

cat /sys/fs/cgroup/cpu/nome-grupo/tasks

sudo cgset -r memory.limit_in_bytes=128M nome-grupo

sudo cgget -r memory.stat nome-grupo

cat /sys/fs/cgroup/memory/nome-grupo/memory.limit_in_bytes

sudo cgset -r cpu.cfs_periodo_us=100000 -r cpu.cfs_quota_us=$[ 10000 * 32] nome-grupo

stress --cpu 1 --vm-bytes 120M --VM 1

Com esses procedimentos executados você pode observar o funcionamento por debaixos dos panos do Docker, a criação de um container sem Docker, por meio da imagem minialista do Debian e o isolamento de processos com namespaces, cgroups, chroot, unshare e teste de stress do container puro criado.

Feito!

terça-feira, 25 de julho de 2023

Configurando o MailHog no Laravel

MailHog é uma ferramenta de desenvolvimento que permite capturar e visualizar e-mails enviados por uma aplicação. Neste tutorial, explicarei como utilizar o MailHog em conjunto com uma aplicação Laravel para testar o envio de e-mails durante o desenvolvimento.

Com o Docker instalado, execute:

docker container run -d --name mailhog -p 8025:8025 -p 1025:1025 mailhog/mailhog

O MailHog será iniciado e começará a escutar na porta 1025 para SMTP e a porta 8025 para HTTP

Configurando o MailHog no projeto Laravel

Adicionar o MailHog no projeto Laravel

Abre o terminal e acesse o diretório raiz do projeto

composer require --dev mailhog/mailhog

Edite o arquivo .env e configure as variáveis

MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=seu-email@app.exemplo.com
MAIL_FROM_NAME="${APP_NAME}"

Essas configurações informam ao Laravel para usar o MailHog como servidor SMTP e enviar e-mails para o endereço especificado em MAIL_FROM_ADDRESS.

Testando o envio de e-mails

Estando com o MailHog em execução no ambiente Docker e configurado corretamente na sua aplicação Laravel, segue o exemplo básico de implementação para testar o envio de e-mails com o MailHog

php artisan make:mail WelcomeEmail

Abra o arquivo WelcomeEmail.php localizado em app/Mail e implemente o conteúdo do e-mail. O método build é onde você pode definir a estrutura do e-mail, o assunto e outras informações relevantes.

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class WelcomeEmail extends Mailable
{
use Queueable, SerializesModels;

public $user;

/**
* Create a new message instance.
*
* @param User $user
* @return void
*/
public function __construct($user)
{
$this->user = $user;
}

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome')
->subject('Bem-vindo ao sistema')
->with([
'userName' => $this->user->name,
]);
}
}

Agora, você precisa criar a view para o e-mail de boas-vindas. O Laravel segue uma convenção para a localização das views de e-mails. Crie um novo arquivo chamado welcome.blade.php no diretório resources/views/emails. A estrutura da view pode ser semelhante a esta:

<!DOCTYPE html>
<html>
<head>
<title>Bem-vindo(a) ao Nosso Site</title>
</head>
<body>
<h2>Olá, {{ $userName }}!</h2>
<p>Bem-vindo(a) ao nosso site! Esperamos que você aproveite sua experiência conosco.</p>
</body>
</html>

Com a classe WelcomeEmail e a view criadas, você pode testar o envio do e-mail de boas-vindas em seu controlador de registro de usuários

use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;

// ...

public function register(Request $request)
{
// Lógica de registro do usuário...

// Enviar e-mail de boas-vindas
Mail::to($user->email)->send(new WelcomeEmail($user));
}

Agora no presente exemplo a cada novo usuário registrado, o e-mail de boas-vindas será encaminhado ao endereço de e-mail do usuário, os e-mails estão sendo capturados pelo MailHog, você pode visualizá-los em um navegador. Abra seu navegador da web e acesse http://localhost:8025. Você verá a interface do MailHog, onde poderá visualizar todos os e-mails encaminhados pela sua aplicação.

Lembre-se de que o MailHog é uma ferramenta de desenvolvimento, portanto, os e-mails capturados não serão enviados para os destinatários reais. Eles ficam disponíveis apenas para visualização na interface do MailHog.

Com isso, você configurou e utilizou o MailHog para capturar e visualizar e-mails enviados por sua aplicação Laravel durante o desenvolvimento. Isso pode ser especialmente útil para depuração e testes de envio de e-mails sem a necessidade de enviar mensagens reais para os destinatários durante a fase de desenvolvimento.

Feito!

terça-feira, 18 de julho de 2023

Conhecendo o gerador No-Code de CRUD

Refine é uma estrutura baseada em React que permite o desenvolvimento rápido de aplicativos da web. Ele elimina as tarefas repetitivas exigidas pelas operações CRUD e fornece soluções padrão do setor para partes críticas de um projeto, como autenticação, controle de acesso, roteamento, rede, gerenciamento de estado e i18n.

O Refine é headless por design, oferecendo opções ilimitadas de estilo e personalização. Fora isso você pode escolher o seu framework de Interface de usuário favorito para trabalhar em seus aplicativos, como Material UI, Ant Design, Chakra UI, Mantine e o padrão Headless.

Outra escolha que você pode fazer é a plataforma React que deseja trabalhar. Entre as disponíveis estão Vite, Remix e Next.js. Estas escolhes abrem um leque enorme para te ajudar a criar e desenvolver suas próprias aplicações CRUD de um jeito muito mais rápido e dinâmico.

O Refine é Open Source, de código aberto, e você pode criar o seu ambiente de desenvolvimento local em poucos passos. A documentação é muito completa e repleta de tutoriais para ajuda-lo.

Criando o CRUD com Refine

É possível utilizar a plataforma refine.new ou local no seu computador.

Com a plataforma refine.new as partes segue:

Parte 1: Seleciona entre Vie, Remix, Next.js

Parte 2: Seleciona UI Framework entre Material UI, Ant Design, Chakra UI, Mantine Headless

Parte 3: Seleciona o Backend entre REST API, Supabase, Strapi, NestJS, Appwrite, Airtable, Hasura

Parte 4: Seleciona o provedor de autenticação entre Google Auth, Keycloak, AuthO, Subabase, Appwrite, Strapi, Custom Auth, No Auth

Aparecerá um resumo das etapas que escolheu, confirme e irá redirecionar no projeto gerado com Refine.

No ambiente local no seu computador

Premissas: Ter o Node.js instalado

npm create refine-app@latest

npm run dev

No browser http://localhost:3000 você irá ver uma tabela com dados fictícios de posts de blog e categorias com paginação.

Mas o Refine não se limita apenas a isso, pode criar partes de componentes do formulário que for desenvolver.

Veja alguns exemplos de componentes que pode criar campos de formulário.

Custom Input

npm create refine-app@latest -- --example input-custom

useSelect

npm create refine-app@latest -- --example field-antd-use-select-basic

useSelect com lista infinita

npm create refine-app@latest -- --example field-antd-use-select-infinite

useAutocomplete

npm create refine-app@latest -- --example field-material-ui-use-autocomplete

useCheckboxGroup

npm create refine-app@latest -- --example field-antd-use-checkbox-group

useRadioGroup

npm create refine-app@latest -- --example field-antd-use-radio-group

Base64 Upload

npm create refine-app@latest -- --example upload-material-ui-base64

Multipart Upload

npm create refine-app@latest -- --example upload-antd-multipart

Date Picker

npm create refine-app@latest -- --example input-date-picker

Search

npm create refine-app@latest -- --example search

Google Auth

npm create refine-app@latest -- --example auth-google-login

Login

npm create refine-app@latest -- --example customization-login

Referências

https://refine.dev/docs/

Feito!

segunda-feira, 17 de julho de 2023

Conhecendo o Urban VPN

Navegação ilimitada e segura com a extensão grátis para Chrome, Edge e Firefox

A extensão Urban VPN para navegador lhe oferece uma ativação rápida com largura de banca ilimitada, permitindo transmitir e baixar conteúdo com facilidade e velocidade. Oculte seu IP e escolha a partir de um número crescente de locais internacionais ao redor do mundo.

Com a Urban VPN você pode navegar por sites restritos geograficamente com uma conexão criptografada e contornar firewalls com segurança, sem se preocupar com roubo de informações pessoais – e manter seu dispositivo seguro de malware quando usar conexões Wi-Fi públicas.

Quando você escolhe a Urban VPN, você escolhe qualidade, segurança e proteção!

Não é necessário fazer download de programas adicionais, basta clicar para fazer o download da extensão e você está pronto para navegar.

Extensões do Urban VPN para os navegadores: Chrome, Edge e Firefox

Urban VPN para Chrome

Urban VPN para Edge

Urban VPN para Firefox

Após instalar a extensão de algum dos links acima, conforme o navegador que você estiver utilizando entre Chrome, Edge ou Firefox, segue os screenshots ilustrativo.

Screenshots

Termo de aceite dos termos

Escolha uma lista de servidores disponíveis que deseja conectar na VPN

Feito!

sábado, 15 de julho de 2023

Conhecendo uma ferramenta alternativa ao Canva

Aktivisda é uma aplicação web para facilitar a criação visual através de vetores, é uma alternativa open source ao Canva atualmente.

Com o Aktivisda pode criar, editar posters, convites, miniaturas de vídeos e etc. Após de pronto, exportar para PNG, JPG ou PDF.

Instalando e Configurando o Aktivisda

Requisitos:

Node.js

NPM < 16

Utilize o NVM (gerenciador de versões do Node.js / NPM)

Instalação do NVM (Gerenciador de versão do Node.js)

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.39.3/install.sh | bash

source ~./bashrc

Lista as versões

nvm ls-remote

nvm install v16.18.0

nvm use v16.18.0

git clone git@framagit.org:aktivisda/extinction-rebellion.git

cd extinction-rebellion

git clone git@framagit.org:aktivisda/aktivisda.git aktivisda-core

No diretório extinction-rebellion, execute:

npm install

No diretório aktivisda-core, execute:

npm run serve

No browser acesse http://IPSERVIDOR:8080

Feito!

segunda-feira, 3 de julho de 2023

Descobrindo a velocidade de sua placa de rede via CLI

A ferramenta ethtool é uma poderosa e amplamente utilizada ferramenta de linha de comando em sistemas Linux para configuração e diagnóstico de placas de rede Ethernet. Ela fornece uma maneira simples e eficiente de verificar a velocidade da placa de rede, entre outras informações relacionadas à interface de rede.

No GNU/Linux Debian e derivados, segue:

$ sudo apt install ethtool

$ sudo ethtool <interface> | grep Speed

Substitua <interface> pelo nome da sua interface de rede. Por exemplo, "eth0" ou "enp0s3" são nomes comuns para interfaces Ethernet.

Após executar o comando acima com filtro Speed, exibirá a informação da velocidade da interface de rede. Por exemplo, se a velocidade for exibida como "100Mb/s", significa que a placa de rede está operando a 100 Megabit por segundo.

Se a velocidade for exibida como "1000Mb/s", significa que a placa de rede está operando a 1 Gigabit por segundo.

Feito!