Skip to main content

· One min read

29/10/2022 - Aula 4 de Ruby (Remoto)

A aula começou um pouco atrasada pois o coordenador não apareceu para liberar o Google Meet para nós, mas o professor Mauricio utilizou uma conta dele para criar uma sala e nós entramos por lá.

Professor começou recapitulando a aula anterior e explicando novos itens do Next.js.

Começamos vendo sobre o useSWR que é um hook que faz o cache de dados e faz o refresh deles quando necessário.

import useSWR from 'swr'

function Profile() {
const { data, error } = useSWR('/api/user', fetch)

if (error) return <div>failed to load</div>
if (!data) return <div>loading...</div>
return <div>hello {data.name}!</div>
}

Depois arrumamos a parte de autenticação na API e utilizamos o NextAuth para fazer a autenticação.

import { signIn, signOut, useSession } from 'next-auth/client'

export default function Page() {
const [ session, loading ] = useSession()

return <>
{!session && <>
Not signed in <br/>
<button onClick={signIn}>Sign in</button>
</>}
{session && <>
Signed in as {session.user.email} <br/>
<button onClick={signOut}>Sign out</button>
</>}
</>
}

Depois disso, professor falou do trabalho, e ficou para ajudar quem tiver dúvidas.

· 2 min read

15/10/2022 - Aula 3 de Ruby (Remoto)

Nossa terceira aula começa com uma recapturação sobre a aula anterior, professor compartilhou o video que foi gravado e passou o link para que todos possam assistir.

Depois disso, começamos a falar sobre Angular, para ver se tinha pessoas que dominavam Angular e que poderiam ajudar, mas no caso, vamos utilizar React para fazer um front, pois é o que o professor domina.

Para fazermos o projeto, vamos utilizar verificar a versão do NodeJS que está instalada, para isso, vamos utilizar o comando:

node -v 

A versão LTS atual é a 16.18.0, que vai ser a versão recomendada.

Para criar o projeto, vamos utilizar o comando:

npx create-next-app@latest

E vamos subir o servidor de desenvolvimento com o comando:

npm run dev -p 4000

Depois o professor foi explicando a estrutura do NextJs. E como que funciona o React.

Montamos alguns arquivos de exemplo para entender como funciona o gerenciamento de estado do React.

Após isso começamos a ver sobre sobre a estrutura de rotas do projeto e como que funciona trabalhar com atributos dinâmicos, como ids.

Exemplo

  • localhost:4000/users/1

Seguimos a aula com a criação de um CRUD de artigos, consumindo a API que foi criada no Rails.

Foi isso para a aula de hoje

Vídeo da aula

Aula da manhã

Aula da tarde

· 2 min read

01/10/2022 - Aula 2 de Ruby (Remoto)

A segunda aula de Ruby começou com nós fazendo uma atividade no JamBoard do Google.

Imagem1

Após um tempo para fazermos, o professor foi passando um por um vendo como que cada aluno estava fazendo e as tecnologias que estavam sendo usadas. Isso foi feito para ver como que a turma está pensando e o nível de conhecimento que cada um tem.

O PDF com o que cada aluno fez pode ser encontrado aqui.

Depois disso, começamos a criar um novo projeto, para explorar como utilizar Ruby on Rails voltado para APIs.

rails new pos-unipar-rails-app --api

Após isso, começamos a criar as rotas e os controllers para cada uma delas.

rails generate scaffold Article title:string body:string

Esse comando cria o controller, o model e as rotas para o CRUD do Article.

Agora vamos gerar o Category, que será o relacionamento do Article.

rails generate scaffold Category name:string

Agora vamos criar o relacionamento entre os dois.

class Article < ApplicationRecord
belongs_to :category
end
class Category < ApplicationRecord
has_many :articles
end

E agora vamos criar um usuário

rails generate scaffold User name:string email:string password:string

Professor passou mais algumas coisas sobre relacionamentos, mas passou um outro material para fazermos em conjunto.

https://www.bluebash.co/blog/rails-6-7-api-authentication-with-jwt/

Final da aula 2

· 5 min read

17/09/2022 - Aula 1 de Ruby (Presencial)

A primeira aula de Ruby, o professor Mauricio começou a aula falando sobre o que é Ruby, e como ele é uma linguagem de programação de alto nível, interpretada, orientada a objetos, imperativa, funcional e reflexiva. Também falou que o Ruby não é a linguagem mais , mas que tem um desenvolvimento extremamente rápido.

O Ruby é uma linguagem que utiliza um terminal interativo, chamado de IRB, que é um interpretador de comandos que permite a execução de comandos Ruby de forma interativa.

Para a aula, o professor criou um arquivo no Google Drive, que é para irmos editando conforme a aula for decorrendo. O link é esse.

Tudo em Ruby é um objeto, e para saber o tipo de um objeto, podemos utilizar o método class:

"string".class
# => String

Também podemos utilizar o método is_a? para saber se um objeto é de um determinado tipo:

"string".is_a?(String)
# => true

Para listar todos os métodos de um objeto, podemos utilizar o método methods:

"string".methods
[
include?, %, *, +, unicode_normalize, to_c, unicode_normalize!,
unicode_normalized?, count, partition, unpack, encode, encode!, next,
casecmp, insert, bytesize, match, succ!, next!, upto, index, rindex,
replace, clear, chr, +@, -@, setbyte, getbyte, <=>, <<, scrub, scrub!,
byteslice, ==, ===, dump, =~, downcase, [], []=, upcase, downcase!,
capitalize, swapcase, upcase!, oct, empty?, eql?, hex, chars, split,
capitalize!, swapcase!, concat, codepoints, reverse, lines, bytes,
prepend, scan, ord, reverse!, center, sub, freeze, inspect, intern,
end_with?, gsub, chop, crypt, gsub!, start_with?, rstrip, sub!, ljust,
length, size, strip!, succ, rstrip!, chomp, strip, rjust, lstrip!,
tr!, chomp!, squeeze, lstrip, tr_s!, to_str, to_sym, chop!, each_byte,
each_char, each_codepoint, to_s, to_i, tr_s, delete, encoding,
force_encoding, sum, delete!, squeeze!, tr, to_f, valid_encoding?,
slice, slice!, rpartition, each_line, b, ascii_only?, hash, to_r, <, >,
<=, >=, between?, instance_of?, public_send, instance_variable_get,
instance_variable_set, instance_variable_defined?,
remove_instance_variable, private_methods, kind_of?,
instance_variables, tap, method, public_method, singleton_method,
is_a?, extend, define_singleton_method, to_enum, enum_for, !~,
respond_to?, display, object_id, send, nil?, class, singleton_class,
!, !=, __send__, equal?, instance_eval, instance_exec, __id__
]

No Ruby, podemos utilizar o ! para indicar que um método é perigoso, ou seja, ele pode alterar o estado do objeto. Por exemplo, o método upcase! altera o estado do objeto, enquanto o método upcase não altera o estado do objeto:

string = "string"
string.upcase
# => "STRING"
string
# => "string"
string.upcase! # Vai alterar o estado do objeto
# => "STRING"
string
# => "STRING"

Para poder acessar um valor de uma classe, podemos criar getters e setters. Por exemplo, para criar um getter, podemos utilizar o método attr_reader:

class Pessoa
attr_reader :nome
def initialize(nome)
@nome = nome
end
end

pessoa = Pessoa.new("Nome da pessoa")
pessoa.nome
# => "Nome da pessoa"

Para criar um setter, podemos utilizar o método attr_writer:

class Pessoa
attr_writer :nome
def initialize(nome)
@nome = nome
end
end

pessoa = Pessoa.new("Nome da pessoa")
pessoa.nome = "Novo nome"
pessoa.nome
# => "Novo nome"

Para criar um getter e um setter, podemos utilizar o método attr_accessor:

class Pessoa
attr_accessor :nome
def initialize(nome)
@nome = nome
end
end

pessoa = Pessoa.new("Nome da pessoa")
pessoa.nome
# => "Nome da pessoa"
pessoa.nome = "Novo nome"
pessoa.nome
# => "Novo nome"

Para criar um método, podemos utilizar a palavra reservada def:

def soma(a, b)
a + b
end

soma(1, 2)
# => 3

Criando um projeto Ruby

Podemos instalar o Ruby on Rails utilizando o RubyGems, que é um gerenciador de pacotes para a linguagem Ruby. Para instalar o Ruby on Rails, podemos utilizar o comando gem install:

gem install rails

E para instalar as dependências do projeto, podemos utilizar o comando bundle install:

bundle install

Para criar um projeto Ruby, podemos utilizar o Ruby on Rails, que é um framework web escrito em Ruby. Para criar um projeto Ruby on Rails, podemos utilizar o comando rails new:

rails new projeto

Para iniciar o servidor do projeto, podemos utilizar o comando rails server:

rails server

Para criar um controller, podemos utilizar o comando rails generate controller:

rails generate controller articles

Para criar um model, podemos utilizar o comando rails generate model:

rails generate model article title:string body:text

Para criar um scaffold, podemos utilizar o comando rails generate scaffold:

rails generate scaffold article title:string body:text

Para criar um migration, podemos utilizar o comando rails generate migration:

rails generate migration add_details_to_articles

Para executar as migrations, podemos utilizar o comando rails db:migrate:

rails db:migrate

Para criar um banco de dados, podemos utilizar o comando rails db:create:

rails db:create

Para gerarmos 1000 articles, podemos utilizar no console do Rails o comando Article.create:

rails console
1000.times do |i|
Article.create(title: "Title: #{i}", body: "Body")
end

Vimos em como fazer na mão, seguindo o tutorial do Ruby on Rails.

A aula foi bem produtiva, conseguimos avançar bem no tutorial.

· 2 min read

10/09/2022 - Aula 3 de DevOps (Presencial)

A aula começou 10minutos atrasada pois a sala estava trancada, mas logo alguém a briu e a aula começou. O professor Jemerson pediu para atualizarmos o projeto unipar-devops pois ele enviou la o Máterial em PDF para a aula de hoje.

O objetivo da aula de hoje é ver sobre monitoramento de aplicações, e para isso vamos usar o Prometheus e Grafana.

Monitoramento

Busca supervisionar todo o processo de desenvolvimento de software, desde o planejamento até a implantação e operação. Isso permite responder a qualquer degradação na experiência do cliente, detectando e respondendo a qualquer incidente (bugs, comportamentos inadequados, falhas de recursos físicos, integração com terceiros, entre outros).

Metas do monitoramento

Um dos principais objetivos do monitoramento é alcançar a alta disponibilidade minimizando as principais métricas medidas em termos de tempo:

  • TTD (Time to Detect): Tempo para detectar problemas diversos;
  • TTM (Time to mitigate): Tempo para atenuar os problemas o mais rápido possível para que os usuários não sejam afetados;
  • TTR (Time to remediate): Tempo para correção são medidos e as equipes trabalham para melhorar ao longo do tempo

Conceitos

  • Telemetria
    • Mecanismo de coletar dados do monitoramento.
  • Monitoramento sintético
    • Avalia o desempenho e a disponibilidade
  • Monitoramento real do usuário
    • Medem a experiência do navegador ou dispositivo móvel

Ferramentas

Uma lista de ferramentas de monitoramento pode ser encontrada em Cloud Native Computing Foundation

Ferramentas de monitoramento

Depois de passar esses conteúdos, o professor Jemerson pediu para fazermos o trabalho do curso, que é criar um ambiente de monitoramento para o projeto das atividades anteriores.

Depois de fazermos o trabalho, teve uma competição sobre perguntas de DevOps, o ganhador levava um livro sobre DevOps.

Trabalho

As informações do trabalho estão na pagina da disciplina. Link

· 2 min read

27/08/2022 - Aula 2 de DevOps (Presencial)

O professor Jemerson pediu para atualizarmos o projeto unipar-devops pois ele enviou la o Máterial em PDF para a aula de hoje.

Infraestrutura como código (IaC)

IaC é uma prática DevOps que busca automatizar o provisionamento da infraestrutura de TI. Consiste na utilização de uma linguagem de codificação descritiva de alto nível que tem como objetivo automatizar o provisionamento da infraestrutura seja on premise ou cloud

Exemplos de ferramentas:

Terraform

De acordo com o site oficial, o Terraform é uma ferramenta de infraestrutura como código (IaC) que permite a criação, alteração e versão de infraestrutura de TI de forma segura e eficiente.

Ele pode ser utilizado para gerenciar as principais nuvens públicas e privadas de TI, como AWS, Azure, Google Cloud, etc.

Após criamos uma maquina com o Terraform na AWS, vamos utilizar o Ansible.

Exemplo de comandos:

Ansible

O Ansible é um mecanismo de automação de TI open source para automação de processos como provisionamento, gerenciamento de configurações, implantação de aplicações, orquestração e muitos outros

  • Inventory
    • Os inventários organizam os nós gerenciados em arquivos centralizados que fornecem ao Ansible informações do sistema e locais de rede.
  • Playbook
    • Os playbooks são blueprints de automação, em formato YAML, que o Ansible usa para implantar e configurar nós gerenciados.

Depois de passar esses conteúdos, o professor Jemerson pediu para fazermos uma atividade 2.

· 3 min read

13/08/2022 - Aula 1 de DevOps (Presencial)

A aula começou as 08h, com o professor Jemerson, com o professor passando o que vai ser visto durante a pós. Pediu para baixar o projeto no github, pois vai ser utilizado ele como base, além disso, utilizamos o máterial em PDF.

O que é

DevOps (Development + Operations) é um processo de desenvolvimento e entrega de software que enfatiza a comunicação entre os profissionais de desenvolvimento e operações.

É um conjunto de práticas que automatizam os processos entre equipes de desenvolvimento de software e de TI para que possam criar, testar e liberar softwares de maneira mais rápida e confiável.

A combinação de filosofias culturais, práticas e ferramentas que aumentam a capacidade de uma empresa de distribuir aplicativos e serviços em alta velocidade

Como começou - Manifesto Ágil

  • Indivíduos e interações, mais que processos e ferramentas.
  • Software em funcionamento, mais que documentação abrangente
  • Responder a mudanças, mais que seguir um plano

C.A.M.S. ( Culture, Automation, Measure, Sharing)

  • Culture (Cultura)
    • É preciso colaborar, compartilhar e entender a importância de manter uma relação saudável entre todas as áreas.
  • Automation (Automação)
    • Identificar os processos que sejam repetitivos ou que levam bastante tempo e buscar resolver o quanto antes.
  • Measure (Medir)
    • Deve-se medir tudo que é possível: performance, processos, interações e até mesmo pessoas. O processo de melhoria contínua é o coração do DevOps!
  • Sharing (Compartilhamento)
    • Ter uma boa comunicação entre as equipes, incentivar as pessoas a se comunicarem e compartilharem ideias e problemas (Blameless).

O que precisamos para começar

  • Cultura;
  • Programação;
  • Gerenciar Servidores, Virtualização, Redes e Segurança;
  • Criação de Scripts;
  • Instalar e configurar middlewares (apache, nginx, haproxy);
  • Instalar softwares;
  • Versionar arquivos com GIT;
  • Automatizar tarefas e gerenciar configurações;
  • Infraestrutura como Código;
  • Observabilidade;
  • Orquestração de Containers;
  • Compartilhar;

Docker

É uma tecnologia de conteinerização que permite a criação e o uso de containers Linux.

Containers são como se fossem máquinas virtuais modulares e extremamente leves.

O Docker possibilita o empacotamento de uma aplicação ou ambiente inteiro dentro de um container, e a partir desse momento o ambiente inteiro torna-se portável para qualquer outro Host que contenha o Docker instalado.

Para ajudar no uso do Docker, temos o DockerFile, que é um arquivo de configuração que permite a criação de containers, e o Docker Compose, que é um arquivo de configuração que permite a criação de múltiplos containers.

Exemplo dos comandos:

Com isso, finalizamos a aula 1 de DevOps.

· One min read

16/07/2022 - Aula 4 de Node.js (Presencial)

Ultima aula de Node.js, começamos as 08:30h, baixando o projeto de Angular feito aqui na pós, app-unipar4, para podermos integrar com o backend em Node.js.

Alguns ajustes tem que ser feitos para o projeto para com que ele funcione, como ajustes das rotas e formas de autenticação.

Depois o professor passou o trabalho e ficou disponível para tirar algumas dúvidas.

Trabalho

As informações do trabalho estão na pagina da disciplina. Link

· One min read

02/07/2022 - Aula 3 de Node.js (Presencial)

Chegamos na Unipar e a sala estava trancada, após uns 10 minutos, conseguimos entrar na sala. O Professor Marlon passou uma atividade para criamos uma rota para a criação de um novo usuário, com as rotas GET, POST, PUT e DELETE.

Para o usuário, vamos utilizar criptografia, e precisamos dos pacotes abaixo:

npm install --save bcrypt
npm install --save jsonwebtoken
npm install --save passport
npm install --save passport-local

Implementamos a criptografia e o login com o passport, utilizando JWT para controlar o acesso a rotas.

Vamos trabalhar com documentação do projeto, para isso vamos utilizar o pacote swagger.

    npm install --save swagger-ui-express
npm install --save swagger-jsdoc

Criamos a documentação do projeto para alguns dos endpoints e testamos como utilizar o swagger.

Com isso finalizamos a aula de hoje.

· One min read

25/06/2022 - Aula 2 de Node.js (Presencial)

O Professor Marlon, chegou atrasado 10 minutos. Começou a aula as 08:40h, após o professor enviar o projeto para o github, o link é aula-node-posunipar.

Começamos a aula instalando um novo pacote para o mongo

npm install --save mongoose

Seguimos a aula fazendo com que os metodos GET, PATCH e DELETE funcionem com o banco de dados MongoDB

Teve o intervalo as 12h até as 13:30h.

Continuamos mudando as rotas para a parte das ordens

Adicionamos um novo pacote

npm install --savel multer

Utilizamos o multer para fazer o upload de arquivos

Com isso finalizamos a aula de hoje.