Sem categoria
Ferramentas de Treinamento para Redes Neurais: Automatizando Coleta, Processamento e Organização de Dados

O desenvolvimento de modelos de inteligência artificial depende diretamente da qualidade e da diversidade dos dados utilizados para treinamento. Entretanto, a construção dessas bases costuma ser um grande desafio, exigindo ferramentas específicas para coleta, análise e organização de dados multimodais (texto, áudio, vídeo, imagens, documentos e produtos comerciais).

Pensando nessa necessidade, foi criado o projeto Ferramentas de Treinamento para Redes Neurais, um pacote integrado que oferece automação e gestão de dados para pesquisa, treinamento e experimentação em IA.


🎯 Objetivo do Projeto

O projeto visa fornecer um ecossistema unificado para coleta e preparação de dados de treinamento, eliminando processos manuais e descentralizados.

Ele integra diferentes módulos que atuam em conjunto:

  • Captura de voz e chatbot inteligente: interação com linguagem natural, registrando perguntas e respostas no banco.
  • Coleta de vídeos e transcrições do YouTube: extração de legendas ou áudio com filtros e segmentação automática.
  • Análise e processamento de documentos: leitura automatizada de PDFs, textos, planilhas e arquivos DOCX.
  • Monitoramento de e-mails e POP3: captura de mensagens e anexos para análise contextual.
  • Busca de produtos no Mercado Livre: extração de informações técnicas e comerciais.
  • Captura de imagens e faces via câmera ou Kinect: armazenamento em banco para análise visual.
  • Interface web integrada (Streamlit): gerenciamento visual das bases e resultados em tempo real.

🔑 Embasamento e Necessidade

A IA moderna exige grandes volumes de dados rotulados e variados para treinar modelos capazes de generalizar bem em situações reais.
Muitas vezes, os dados disponíveis estão dispersos em fontes distintas, sem padronização ou acessibilidade prática. Isso gera problemas como:

  • Alto tempo de preparação de dados antes de qualquer experimento.
  • Falta de rastreabilidade sobre a origem e o processamento dos dados.
  • Complexidade na integração de múltiplas fontes (vídeo, áudio, texto e imagem).

Além disso, empresas e pesquisadores que não possuem infraestrutura especializada têm dificuldade para replicar pipelines consistentes de treinamento de modelos.

Este projeto surge como uma solução modular e acessível, reunindo automação e banco de dados estruturado em MySQL, simplificando a criação de datasets ricos para experimentos de IA.


✅ Vantagens do Projeto

  1. 🔗 Integração Completa:
    Todos os módulos (voz, vídeo, documentos, e-mails e produtos) compartilham uma única base de dados estruturada, facilitando cruzamento e análise.
  2. 🖥️ Interface Web Gerencial:
    Desenvolvida em Streamlit, permite operar todas as funções do sistema sem linha de comando, tornando-o amigável até para usuários não técnicos.
  3. 📊 Dados Organizados e Escaláveis:
    O uso de MySQL garante integridade, rastreabilidade e flexibilidade para consultas avançadas.
  4. ⚡ Automação Extrema:
    Desde a captura de dados multimodais até a classificação e preparação final para treinamento, tudo é automatizado.
  5. 🎧 Interação em Voz com IA:
    O assistente de voz integrado permite perguntas naturais e devolve respostas faladas, criando e testando modelos e protótipos tanto falados como escritos em chatbot.
  6. 🌐 Código Aberto e Extensível:
    O repositório é público (GitHub), permitindo colaboração e personalização para contextos específicos.

🧠 Vantagens do Modelo de Uso

  • Preparação rápida para treinamentos em NLP, visão computacional e multimodalidade.
  • Compatibilidade com frameworks como TensorFlow, PyTorch e spaCy, que podem consumir diretamente as saídas organizadas do banco.
  • Facilidade para prototipar modelos e validar hipóteses rapidamente, sem esforço manual na coleta e limpeza dos dados.
  • Ambiente controlado e replicável, essencial para projetos acadêmicos e P&D corporativo.

🔗 Repositório Oficial

O código-fonte completo está disponível no GitHub:
➡️ https://github.com/marcelomaurin/TreinamentosIA


🖼️ Diagrama do Projeto

Diagrama do Projeto

Próximos passos

Criação e teste em diversos modelos de IA online e offline.

Melhora dos processos de classificação de documentos, palavras chaves de busca, referencias , síntese.

Uso de IAs para gerar melhora na qualidade dos dados.

🚀 Conclusão

O projeto Ferramentas de Treinamento para Redes Neurais democratiza a preparação de datasets e a experimentação em IA, permitindo que desenvolvedores, pesquisadores e equipes técnicas acelerem seu ciclo de desenvolvimento de modelos.

Com uma estrutura modular, aberta e escalável, ele resolve um dos principais gargalos da área: a obtenção e organização de dados para treinar inteligências artificiais robustas e eficazes.

nodejs
Criando um projeto no nodejs

Para criar um novo projeto use o npm

npm create vite@latest
  1. Indique o nome do projeto. [seu projeto]
  2. Selecione React
  3. TypeScript + SWC

Para rodar

cd pasta do projeto

npm install

npm run dev

Permitindo que o nodejs rode em outras máquinas em DEV

Na pasta da aplicação vite.config.ts

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  server: {
    host: '0.0.0.0',    // ✅ permite acesso externo
    port: 5173,          // ✅ porta padrão (pode mudar)
  }
})

Agora é necessário desbloquear a porta no linux.

sudo ufw allow 5173 # ou
sudo ufw disable # (temporário)

Por fim, é só roda

npm run dev

Agora é só chamar na outra máquina pelo browser.

Ciência de Dados IA NLP
IA – Definições

Corpus – Conjunto de documentos e textos não estruturados

Anotação (Annotations) – Localizar e classificar elementos específicos no texto

TOKEN – Parte de uma sentença (símbolos)

POS (Part of Speech Tagging) – Adiciona tags a cada token, qualifica o token.

Lemmatizing (LEMMA) – traz a palavra na sua flexao exemplo é (ser)

Stemming – Corte o radical da palavra (amigo – amig)

dependency parsing (relação de dependencia)

ngram – palavras consecutivas (Bigrams e Trigrams)

Modelo – Modelos criados (banco de dados treinados para uso de dados)

docker
Docker – Restrição de Recursos

Para rodar um container com restrição de recursos basta seguir a seguinte sintaxe:

docker container run -dt --nome [nome] --cpus [perc] -m [memoria] [imagem]
  • perc – é um valor de 0 a 1, sendo 1, 100% de recursos de um CPU , onde cada unidade é um núcleo de processador.
  • memoria é um valor absoluto onde vem acompanhado de k,m,g,t. Ex.: 100m (100 mega de memoria ram)

O processo de restrição de recursos pode ser feito em dois momentos. Ao rodar (run) ou depois (update).

docker container update --cpus [perc] [imagem]

Analise de recursos usados

Para analise dos recursos usados, use o comando stats.

docker container stats

Recursos do sistema

Para visualizar os recursos do equipamento

docker system info

Recursos do container

Para visualizar os recursos de um dado container, basta usar o seguinte comando.

docker container top [container_name]

Comando de Teste de Container

Apesar de não ser um comando do docker o stress é usado para testar estes parâmetros.

stress -c [cpu] -t [tempo]

Referências:

https://www.geeksforgeeks.org/linux-unix/linux-stress-command-with-examples

Sem categoria
Introdução a criação de Fluxogramas

Introdução

O Fluxograma é uma representação gráfica de um processo, onde são descritas as etapas, decisões e o fluxo de execução de forma sequencial. Amplamente utilizado na administração, engenharia, programação e até na educação, ele é uma ferramenta poderosa para visualizar processos e melhorar a tomada de decisões.

Neste artigo, você vai entender o que é um fluxograma, quais são os tipos, os principais símbolos utilizados e como criar um fluxograma eficiente.


O que é um Fluxograma?

O Fluxograma é um tipo de diagrama que utiliza símbolos padronizados para representar o fluxo de um processo ou sistema. Ele descreve de maneira simples e objetiva:

  • A sequência de atividades.
  • Os pontos de decisão.
  • As entradas e saídas do processo.

É ideal para mapear processos complexos e identificar gargalos, redundâncias ou oportunidades de melhoria.


Para que serve um Fluxograma?

✅ Visualizar e entender processos.
✅ Padronizar procedimentos.
✅ Melhorar a eficiência e produtividade.
✅ Facilitar treinamentos e comunicação.
✅ Apoiar na tomada de decisões.


Principais tipos de Fluxograma

1. Fluxograma de Processo

O mais comum. Mostra a sequência lógica das etapas de um processo, desde o início até o fim.

2. Fluxograma de Documentos

Evidencia o fluxo de documentos dentro de um processo.

3. Fluxograma de Sistema

Descreve o fluxo de dados entre os componentes de um sistema.

4. Fluxograma de Programação

Muito usado na lógica de programação para desenhar algoritmos antes de codificar.


Símbolos principais do Fluxograma

SímboloSignificado
Início ou fim do processo
Atividade ou tarefa
Decisão ou condição
⬇️Direção do fluxo

Além desses, podem ser usados outros símbolos dependendo da complexidade do processo e da norma seguida (ANSI, ISO, BPMN).


Como fazer um Fluxograma?

  1. Defina o objetivo do fluxograma.
  2. Liste todas as etapas do processo.
  3. Organize as etapas na sequência correta.
  4. Escolha os símbolos adequados para cada tipo de ação.
  5. Desenhe o fluxograma, conectando as etapas com setas.
  6. Revise para garantir que todas as etapas estão corretas e bem representadas.

Exemplo prático de Fluxograma

Exemplo: Processo de compra online

  1. Cliente escolhe produto.
  2. Cliente adiciona ao carrinho.
  3. Cliente realiza o pagamento.
  4. Sistema verifica pagamento:
     → Se aprovado: envia confirmação.
     → Se negado: solicita novo pagamento.

Esse exemplo poderia ser desenhado com símbolos, mostrando claramente o fluxo de decisão e ação.


Melhores ferramentas para criar Fluxogramas

  • Lucidchart
  • draw.io (diagrams.net)
  • Microsoft Visio
  • Canva (para fluxogramas mais visuais)
  • Bizagi (para fluxogramas BPMN)

Vantagens do uso de Fluxogramas

✅ Facilita o entendimento de processos complexos.
✅ Reduz falhas e retrabalhos.
✅ Ajuda na padronização de processos.
✅ Suporta auditorias e certificações de qualidade.


Conclusão

O Fluxograma é uma ferramenta indispensável para qualquer pessoa ou empresa que queira otimizar processos e melhorar a comunicação interna. Com ele, fica muito mais fácil identificar pontos de melhoria e garantir que todas as etapas sejam executadas corretamente.

Sem categoria
Diagrama de Sequência

O que é um Diagrama de Sequência? Guia Completo com Exemplos

Introdução

O Diagrama de Sequência é um dos principais diagramas utilizados na modelagem de sistemas orientados a objetos, especialmente na UML (Unified Modeling Language). Ele é fundamental para descrever como os objetos interagem entre si ao longo do tempo, representando a ordem das mensagens e a sequência de eventos em um determinado cenário.

Neste artigo, você vai entender o que é um diagrama de sequência, sua importância, principais elementos, como criar um e exemplos práticos.


O que é um Diagrama de Sequência?

O Diagrama de Sequência é um tipo de diagrama de interação que ilustra como os processos operam com um outro e em que ordem. Ele é particularmente útil para visualizar:

  • A ordem das mensagens entre objetos.
  • O fluxo de controle do sistema.
  • A linha do tempo dos eventos.

Cada elemento do diagrama é posicionado de maneira vertical e cronológica, com as mensagens fluindo de cima para baixo.


Para que serve o Diagrama de Sequência?

Este diagrama é utilizado principalmente para:

✅ Modelar o fluxo de interações em um caso de uso.
✅ Entender e documentar o comportamento do sistema.
✅ Identificar responsabilidades e dependências entre classes.
✅ Auxiliar na implementação de funcionalidades complexas.


Elementos principais de um Diagrama de Sequência

1. Participantes (Actors ou Objects)

São os elementos que interagem no sistema, como classes, objetos ou usuários.

2. Linha de Vida (Lifeline)

Representa a existência de um objeto durante a interação. É desenhada como uma linha vertical.

3. Mensagens

São as comunicações entre os participantes, representadas por setas horizontais. Podem ser chamadas de métodos, retornos de dados ou sinais.

4. Ativação

Indica quando um objeto está ativo ou executando uma operação, geralmente ilustrado por um retângulo fino sobre a linha de vida.

5. Notas e Condições

Adicionam detalhes ou restrições, como loops, condições ou alternativas.


Como criar um Diagrama de Sequência?

  1. Identifique o cenário que será modelado.
  2. Liste os participantes que interagem no cenário.
  3. Defina a sequência de mensagens entre os participantes.
  4. Desenhe as linhas de vida para cada participante.
  5. Inclua as mensagens, ativando e desativando objetos conforme necessário.
  6. Adicione detalhes como loops, condições ou retornos.

Exemplo de Diagrama de Sequência

Imagine o seguinte cenário: um cliente faz login em um sistema.

Participantes:

  • Cliente
  • Interface de Login
  • Sistema de Autenticação
  • Banco de Dados

Sequência:

  1. Cliente solicita autenticação.
  2. Interface de Login encaminha os dados ao Sistema de Autenticação.
  3. Sistema de Autenticação consulta o Banco de Dados.
  4. Banco de Dados retorna a validação.
  5. Sistema de Autenticação envia o resultado à Interface de Login.
  6. Interface de Login informa o Cliente.

Este exemplo pode ser representado visualmente em um diagrama de sequência simples, facilitando o entendimento do fluxo.


Melhores ferramentas para criar Diagramas de Sequência

  • Lucidchart
  • draw.io (diagrams.net)
  • Visual Paradigm
  • StarUML
  • PlantUML (ideal para quem prefere código)

Conclusão

O Diagrama de Sequência é uma ferramenta essencial na modelagem de sistemas, proporcionando uma visão clara das interações entre objetos e facilitando a comunicação entre analistas, desenvolvedores e stakeholders.

Se você trabalha com análise de sistemas ou desenvolvimento de software, dominar a criação e interpretação de diagramas de sequência é um diferencial competitivo!

PDS e Metodologias Ágeis
Resultado do Projeto

A partir dessa conversa, o aluno consegue extrair:

Banco de Dados Simplificado

  • Tabela produtos
    • id (PK)
    • nome
    • preco
    • tamanho
    • foto
    • ativo (booleano)
  • Tabela adicionais
    • id (PK)
    • nome
    • preco
  • Tabela pedidos
    • id (PK)
    • nome_cliente
    • telefone_cliente
    • bairro
    • data_hora
  • Tabela itens_pedido
    • id (PK)
    • pedido_id (FK)
    • produto_id (FK)
    • tamanho
    • adicionais (lista simplificada, se quiser)

Casos de Uso

  • Cliente:
    • Visualizar produtos
    • Adicionar produtos ao carrinho
    • Escolher adicionais
    • Finalizar pedido
  • Dono da loja:
    • Cadastrar produto
    • Editar produto
    • Cadastrar adicionais
    • Desativar produto
    • Ver pedidos

Objetivo Final

🎯 Criar um site com:

  • Página inicial listando os produtos
  • Tela de escolha de adicionais
  • Carrinho de compras
  • Formulário simples (Nome, Telefone, Bairro)
  • Botão “Enviar pedido” integrando com WhatsApp
  • Painel administrativo bem simples

Vou seguir essa ordem para ficar fácil para seus alunos:

  1. 🎯 Casos de Uso
  2. 📦 Diagrama de Classes
  3. 🛢️ Tabelas (Banco de Dados)
  4. 🖥️ Programa em Python (bem simples, tipo console) para atender o cliente

Vou fazer tudo bem simples e didático para quem está começando! Vamos lá:


🎯 1. Casos de Uso

Ator 1: Cliente

  • Visualizar lista de produtos
  • Escolher produto e adicionais
  • Preencher nome, telefone e bairro
  • Confirmar pedido

Ator 2: Dono da loja

  • Cadastrar novo produto
  • Editar produto
  • Desativar produto
  • Cadastrar adicionais
  • Visualizar pedidos recebidos

📦 2. Diagrama de Classes (Simplificado)

+----------------+        +----------------+        +----------------+
|    Produto     |        |    Adicional    |        |     Pedido      |
+----------------+        +----------------+        +----------------+
| - id: int      |        | - id: int       |        | - id: int       |
| - nome: str    |        | - nome: str     |        | - nome_cliente  |
| - preco: float |        | - preco: float  |        | - telefone      |
| - tamanho: str |        +----------------+        | - bairro        |
| - ativo: bool  |                                 | - data_hora     |
+----------------+                                 +----------------+
          |                                               |
          |                                               |
          |                      +------------------------+
          |                      |
          |                 +-----------------+
          |                 |  ItensPedido     |
          |                 +-----------------+
          |                 | - id: int        |
          +---------------->| - pedido_id: int |
                            | - produto_id: int|
                            | - adicionais: str|
                            +-----------------+

🛢️ Tabelas no SQLite

Aqui está o script para criar o banco SQLite:

-- Criação das tabelas no SQLite

CREATE TABLE produtos (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome TEXT NOT NULL,
    preco REAL NOT NULL,
    tamanho TEXT NOT NULL,
    ativo INTEGER DEFAULT 1 -- 1 = ativo, 0 = inativo
);

CREATE TABLE adicionais (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome TEXT NOT NULL,
    preco REAL NOT NULL
);

CREATE TABLE pedidos (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome_cliente TEXT NOT NULL,
    telefone_cliente TEXT NOT NULL,
    bairro TEXT,
    data_hora TEXT DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE itens_pedido (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    pedido_id INTEGER,
    produto_id INTEGER,
    adicionais TEXT,
    FOREIGN KEY (pedido_id) REFERENCES pedidos(id),
    FOREIGN KEY (produto_id) REFERENCES produtos(id)
);

🐍 Código Python usando SQLite (bem fácil)

Aqui está o programa completo agora com banco SQLite:

import sqlite3
from datetime import datetime

# Conexão com o banco SQLite
conn = sqlite3.connect('acai.db')
cursor = conn.cursor()

# Cria tabelas se não existirem
cursor.execute('''
CREATE TABLE IF NOT EXISTS produtos (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome TEXT NOT NULL,
    preco REAL NOT NULL,
    tamanho TEXT NOT NULL,
    ativo INTEGER DEFAULT 1
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS adicionais (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome TEXT NOT NULL,
    preco REAL NOT NULL
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS pedidos (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome_cliente TEXT NOT NULL,
    telefone_cliente TEXT NOT NULL,
    bairro TEXT,
    data_hora TEXT DEFAULT CURRENT_TIMESTAMP
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS itens_pedido (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    pedido_id INTEGER,
    produto_id INTEGER,
    adicionais TEXT,
    FOREIGN KEY (pedido_id) REFERENCES pedidos(id),
    FOREIGN KEY (produto_id) REFERENCES produtos(id)
)
''')

conn.commit()

def cadastrar_produto():
    nome = input("Nome do produto: ")
    preco = float(input("Preço: "))
    tamanho = input("Tamanho (ex: 300ml, 500ml): ")
    cursor.execute("INSERT INTO produtos (nome, preco, tamanho) VALUES (?, ?, ?)", (nome, preco, tamanho))
    conn.commit()
    print("Produto cadastrado!\n")

def cadastrar_adicional():
    nome = input("Nome do adicional: ")
    preco = float(input("Preço do adicional: "))
    cursor.execute("INSERT INTO adicionais (nome, preco) VALUES (?, ?)", (nome, preco))
    conn.commit()
    print("Adicional cadastrado!\n")

def listar_produtos():
    cursor.execute("SELECT id, nome, preco, tamanho FROM produtos WHERE ativo = 1")
    produtos = cursor.fetchall()
    print("\nProdutos disponíveis:")
    for prod in produtos:
        print(f"{prod[0]}. {prod[1]} - {prod[3]} - R$ {prod[2]:.2f}")
    print()

def listar_adicionais():
    cursor.execute("SELECT id, nome, preco FROM adicionais")
    adicionais = cursor.fetchall()
    print("\nAdicionais disponíveis:")
    for ad in adicionais:
        print(f"{ad[0]}. {ad[1]} - R$ {ad[2]:.2f}")
    print()

def fazer_pedido():
    listar_produtos()
    produto_id = input("Escolha o número do produto: ")
    cursor.execute("SELECT nome, tamanho FROM produtos WHERE id = ? AND ativo = 1", (produto_id,))
    produto = cursor.fetchone()
    if not produto:
        print("Produto inválido!")
        return

    adicionais_selecionados = []
    while True:
        listar_adicionais()
        add = input("Escolha o número do adicional (ou ENTER para finalizar): ")
        if add == "":
            break
        cursor.execute("SELECT nome FROM adicionais WHERE id = ?", (add,))
        adicional = cursor.fetchone()
        if adicional:
            adicionais_selecionados.append(adicional[0])

    nome_cliente = input("Nome do cliente: ")
    telefone = input("Telefone do cliente: ")
    bairro = input("Bairro do cliente: ")

    cursor.execute("INSERT INTO pedidos (nome_cliente, telefone_cliente, bairro) VALUES (?, ?, ?)", 
                   (nome_cliente, telefone, bairro))
    pedido_id = cursor.lastrowid

    adicionais_texto = ', '.join(adicionais_selecionados)
    cursor.execute("INSERT INTO itens_pedido (pedido_id, produto_id, adicionais) VALUES (?, ?, ?)", 
                   (pedido_id, produto_id, adicionais_texto))
    
    conn.commit()
    print("Pedido registrado com sucesso!\n")

def listar_pedidos():
    cursor.execute('''
    SELECT pedidos.nome_cliente, pedidos.telefone_cliente, pedidos.bairro, pedidos.data_hora,
           produtos.nome, produtos.tamanho, itens_pedido.adicionais
    FROM pedidos
    JOIN itens_pedido ON pedidos.id = itens_pedido.pedido_id
    JOIN produtos ON produtos.id = itens_pedido.produto_id
    ''')
    pedidos = cursor.fetchall()
    print("\nPedidos recebidos:")
    for ped in pedidos:
        print(f"- {ped[0]} ({ped[1]}) pediu {ped[4]} {ped[5]} com {ped[6]} [{ped[3]}] - Bairro: {ped[2]}")
    print()

def menu_admin():
    while True:
        print("\n=== Menu Admin ===")
        print("1. Cadastrar Produto")
        print("2. Cadastrar Adicional")
        print("3. Listar Pedidos")
        print("4. Sair")
        op = input("Escolha: ")
        if op == "1":
            cadastrar_produto()
        elif op == "2":
            cadastrar_adicional()
        elif op == "3":
            listar_pedidos()
        elif op == "4":
            break
        else:
            print("Opção inválida.")

def menu_cliente():
    while True:
        print("\n=== Menu Cliente ===")
        print("1. Fazer Pedido")
        print("2. Sair")
        op = input("Escolha: ")
        if op == "1":
            fazer_pedido()
        elif op == "2":
            break
        else:
            print("Opção inválida.")

def main():
    while True:
        print("\n=== Sistema Açaí ===")
        print("1. Cliente")
        print("2. Admin")
        print("3. Sair")
        op = input("Escolha: ")
        if op == "1":
            menu_cliente()
        elif op == "2":
            menu_admin()
        elif op == "3":
            print("Até mais!")
            break
        else:
            print("Opção inválida.")

if __name__ == "__main__":
    main()

🧡 O que você tem agora:

  • Casos de uso ✅
  • Diagrama de classes ✅
  • Estrutura de tabelas SQL ✅
  • Programa Python inicial ✅

Vou montar agora um exemplo usando Streamlit, que é perfeito para criar interfaces web simples em Python — ideal pra mostrar pra turma!

💡 O que vamos fazer:

  • Listar produtos
  • Cliente escolher o produto
  • Selecionar adicionais
  • Preencher nome, telefone e bairro
  • Confirmar o pedido
  • Mostrar o pedido feito na tela (como simulação)

Tudo direto pelo navegador, usando o acai.db (SQLite)!


🖥️ Código Streamlit (arquivo app.py)

import streamlit as st
import sqlite3
from datetime import datetime

# Conexão com o banco SQLite
conn = sqlite3.connect('acai.db', check_same_thread=False)
cursor = conn.cursor()

# Funções auxiliares
def listar_produtos():
    cursor.execute("SELECT id, nome, preco, tamanho FROM produtos WHERE ativo = 1")
    return cursor.fetchall()

def listar_adicionais():
    cursor.execute("SELECT id, nome, preco FROM adicionais")
    return cursor.fetchall()

def registrar_pedido(nome_cliente, telefone, bairro, produto_id, adicionais_lista):
    cursor.execute("INSERT INTO pedidos (nome_cliente, telefone_cliente, bairro) VALUES (?, ?, ?)", 
                   (nome_cliente, telefone, bairro))
    pedido_id = cursor.lastrowid
    adicionais_texto = ', '.join(adicionais_lista)
    cursor.execute("INSERT INTO itens_pedido (pedido_id, produto_id, adicionais) VALUES (?, ?, ?)", 
                   (pedido_id, produto_id, adicionais_texto))
    conn.commit()

# Layout da página
st.title("🍧 Loja de Açaí")

st.header("Escolha seu Açaí")

produtos = listar_produtos()
produtos_dict = {f"{nome} - {tamanho} - R$ {preco:.2f}": id for id, nome, preco, tamanho in produtos}

produto_escolhido = st.selectbox("Selecione um produto", list(produtos_dict.keys()))

adicionais = listar_adicionais()
adicionais_selecionados = st.multiselect(
    "Escolha adicionais (opcional)",
    [f"{nome} - R$ {preco:.2f}" for id, nome, preco in adicionais]
)

st.header("Seus Dados")

nome_cliente = st.text_input("Nome completo")
telefone = st.text_input("Telefone")
bairro = st.text_input("Bairro")

if st.button("Confirmar Pedido"):
    if nome_cliente and telefone and produto_escolhido:
        # Captura IDs dos adicionais selecionados
        adicionais_nomes = [a.split(' - ')[0] for a in adicionais_selecionados]
        
        produto_id = produtos_dict[produto_escolhido]
        registrar_pedido(nome_cliente, telefone, bairro, produto_id, adicionais_nomes)

        st.success("Pedido enviado com sucesso!")
        st.balloons()
    else:
        st.error("Preencha seu nome, telefone e selecione um produto!")

st.divider()

st.subheader("📋 Últimos Pedidos")

cursor.execute('''
    SELECT pedidos.nome_cliente, produtos.nome, produtos.tamanho, itens_pedido.adicionais, pedidos.data_hora
    FROM pedidos
    JOIN itens_pedido ON pedidos.id = itens_pedido.pedido_id
    JOIN produtos ON produtos.id = itens_pedido.produto_id
    ORDER BY pedidos.data_hora DESC
    LIMIT 5
''')
ultimos_pedidos = cursor.fetchall()

for ped in ultimos_pedidos:
    st.write(f"**{ped[0]}** pediu **{ped[1]} {ped[2]}** com _{ped[3]}_ em {ped[4]}")


🚀 Como Rodar:

  1. Instalar o Streamlit:
bashCopiarEditarpip install streamlit
  1. Criar o arquivo app.py com o código acima.
  2. Rodar o aplicativo:
bashCopiarEditarstreamlit run app.py
  1. Vai abrir o navegador automaticamente!
    (Você verá a lojinha de Açaí funcionando 💜)

📋 O que esse exemplo ensina:

  • Conexão SQLite
  • Interface web amigável
  • Escolha de produtos e adicionais
  • Registro de pedidos
  • Feedback visual para o usuário
  • Listagem dos últimos pedidos feitos
PDS e Metodologias Ágeis
Levantamento de Requisitos

Este trabalho simula o dialogo entre um vendedor e um programador.

🟣 Entrevista 1 — Primeira Reunião (Levantamento Inicial)

CLIENTE:
Oi, tudo bem? Então… eu queria fazer um site pra minha loja de açaí, sabe? Um site bonito, que apareça as fotos dos potes bem cheios, com aquelas coberturas caindo assim…

Programador:
Oi, tudo ótimo! Ah, entendi, você quer um site que destaque bem as imagens dos seus produtos, certo?

CLIENTE:
Isso! E queria também que desse pra pessoa montar o açaí dela… tipo, ela escolhe o tamanho, os adicionais, põe leite condensado, paçoca… essas coisas.

Programador:
Entendi. Então seriam dois tipos de venda: produtos prontos (como um açaí tradicional 500ml) e o cliente montando o seu próprio açaí.

CLIENTE:
Exatamente! E sabe o que seria legal? Se tivesse música tocando no site!

Programador:
(risos) Música? Podemos pensar em colocar, mas talvez isso atrapalhe um pouco a navegação, sabe?
Você quer focar em vender ou fazer algo mais descontraído?

CLIENTE:
Ah, é… melhor vender né? Então esquece a música!

Programador:
Certo! Sobre os pedidos: como você quer receber? O cliente paga no site ou paga na hora?

CLIENTE:
Olha, ainda tô começando… queria que ele só mandasse o pedido. Daí eu confirmo no WhatsApp e combino o pagamento.

Programador:
Ok, pedido sem pagamento online. E você quer controlar o estoque também?

CLIENTE:
Estoque? Ah… seria bom saber quando tá acabando leite condensado, paçoca… Mas não precisa ser complicado, não. Se não der, deixa pra depois.

Programador:
Tudo bem, vou anotar como “controle simples de estoque” pra uma segunda fase.

CLIENTE:
Isso!


🟣 Entrevista 2 — Definindo o Básico (com mais detalhes)

Programador:
Oi, voltei! Organizei algumas ideias pra gente confirmar.

CLIENTE:
Ótimo! Vamos ver!

Programador:
Sobre os produtos: você quer cadastrar o nome do açaí, o preço, o tamanho (ex: 300ml, 500ml) e colocar uma foto. Correto?

CLIENTE:
Certo. Mas às vezes eu quero fazer promoções! Tipo, “Compre um de 500ml e ganhe uma granola grátis.”

Programador:
Entendi. Promoções podem ser configuradas também, mas talvez num segundo momento, combinado?

CLIENTE:
Tá bom! Primeiro vamos focar no básico.

Programador:
Sobre os adicionais: vamos ter uma listinha? Tipo: Banana, Paçoca, Leite condensado… cada um com um preço.

CLIENTE:
Sim! E às vezes eu queria dar adicionais grátis em dias especiais, tipo “sexta-feira da banana grátis”.

Programador:
Ok, posso deixar espaço para adicionar promoções depois. No momento, vamos focar no cliente escolher os adicionais e adicionar ao pedido.

CLIENTE:
Perfeito.

Programador:
Agora: o pedido.
O cliente seleciona o produto, escolhe os adicionais e informa o nome e telefone para contato, certo?

CLIENTE:
Isso! E o bairro também, né? Vai que eu começo a entregar…

Programador:
Boa ideia. Vamos incluir campo para Bairro também.

CLIENTE:
Ah, e se a pessoa quiser pedir dois açaís diferentes no mesmo pedido?

Programador:
Ótimo ponto. Então vamos deixar o carrinho com possibilidade de adicionar mais de um produto.


🟣 Entrevista 3 — Confirmando Tudo (com cliente viajando um pouco)

Programador:
Oi, tudo certo? Vim só pra validar antes de começar!

CLIENTE:
Opa! Tô animado!

Programador:
Então vamos lá:
No site, o cliente vai poder:

  • Ver a lista de produtos
  • Ver os adicionais
  • Escolher o produto e o tamanho
  • Escolher adicionais
  • Adicionar ao carrinho
  • Informar nome, telefone e bairro
  • Confirmar pedido
  • E o pedido vai pro seu WhatsApp.

CLIENTE:
Show! E se der, eu queria que o site piscasse alguma coisa, tipo uma estrela, quando a pessoa confirmasse o pedido!

Programador:
(risos) Vamos fazer uma mensagem de “Pedido enviado com sucesso”, pode ser?

CLIENTE:
Tá ótimo! Estrela piscando era bobagem minha, esquece!

Programador:
Beleza. Sobre o controle dos produtos: você vai conseguir acessar um painel pra:

  • Cadastrar novo açaí
  • Alterar preço
  • Cadastrar novos adicionais
  • Alterar fotos

CLIENTE:
Ahhh, legal! Quero também poder desativar um produto, tipo “acabou”, sem apagar tudo.

Programador:
Perfeito, vou colocar a opção de deixar um produto inativo.

CLIENTE:
E se eu mudar de ideia e quiser cobrar o pedido online?

Programador:
A gente consegue adicionar depois. Por enquanto vamos deixar como “pedido via WhatsApp” mesmo.

CLIENTE:
Combinado!

PDS e Metodologias Ágeis
PDS e Metodologias Ágeis

Resumo: Programação, Testes e Modelagem de Sistemas

1. Programação Orientada a Objetos com Python

Conceitos-chave:

  • Classes e Objetos:
    Uma classe é um molde; o objeto é o produto. Classes definem atributos (características) e métodos (ações).
  • Encapsulamento:
    Técnica que protege os dados dentro de uma classe, permitindo acesso controlado através de getters (leitura) e setters (modificação).

Aplicações práticas:

  • Criação de softwares modulares e organizados.
  • Utilização de boas práticas como separação de responsabilidades, reutilização de código e manutenção mais fácil.

Exemplos:

  • Criar uma classe Carro com atributos como cor e métodos como acelerar().

Boas práticas destacadas:

  • Utilizar convenções de encapsulamento (_atributo).
  • Planejar o código com esboços no papel antes da implementação.

2. Testes Não Funcionais: Desempenho, Segurança e Usabilidade

Desempenho

  • Testes de carga e stress:
    Avaliam se o sistema suporta alta demanda (ex.: Black Friday).
  • Otimização de recursos:
    Melhor uso de memória, CPU e armazenamento, como fazem Netflix e Spotify.
  • Monitoramento contínuo:
    Ferramentas como Google Analytics analisam o desempenho em tempo real.

Segurança

  • Testes de invasão (PenTest) e vulnerabilidade:
    Simulam ataques para descobrir falhas.
  • Autenticação e Autorização:
    Como o uso de 2FA (Autenticação de dois fatores).
  • Compliance:
    Seguir normas como GDPR para proteger dados dos usuários.

Exemplo real:
O ataque à Sony Pictures (2014) mostrou falhas como falta de 2FA e servidores desatualizados.

Usabilidade

  • Avaliação heurística:
    Avaliar a facilidade de uso seguindo princípios como os de Nielsen.
  • Testes com usuários reais:
    Observar o uso prático para melhorar a experiência.
  • Acessibilidade:
    Tornar sistemas usáveis para todos, como faz a Apple com seus recursos para deficientes.

3. Diagramas de Casos de Uso (UML)

Exemplo de diagrama de caso de uso: Referencia: https://medium.com/operacionalti/uml-diagrama-de-casos-de-uso-29f4358ce4d5

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

O que são:

  • Diagramas que mostram como os usuários (atores) interagem com o sistema.
  • Representam funcionalidades e ajudam no entendimento, planejamento e comunicação do sistema.

Componentes principais:

  • Atores: quem usa (pessoas ou outros sistemas).
  • Casos de uso: o que o sistema faz para atender o ator.
  • Relacionamentos: associação, inclusão e extensão.

Exemplos:

  • E-commerce: Cliente compra produtos; administrador gerencia estoque.
  • Sistema bancário: Cliente faz saques e consultas.
  • Educação: Aluno assiste aula, professor publica material.

Importância prática:

  • Clarificam requisitos e interações antes da programação.
  • Ajudam a prever problemas e definir prioridades de desenvolvimento.

Resumo Final para Aula

TemaPontos PrincipaisExemplos Reais
Programação O.O.Classes, Objetos, EncapsulamentoPython (classe Carro)
Testes Não FuncionaisCarga, Segurança, UsabilidadeNetflix, Sony Pictures
Diagramas de Casos de UsoVisualizar ações do sistemaE-commerce, Saúde, Educação

💬 Sugestão de abordagem com os alunos:

“Hoje vamos aprender como construir softwares organizados, seguros e fáceis de usar, entendendo como desenhar, testar e programar melhor!”

Resumo Elaborado: Programação, Modelagem de Dados e Requisitos de Software


1. Diagramas UML: Casos de Uso, Classes e Sequências

Diagramas de Casos de Uso ​​

  • Representam as funcionalidades que o sistema oferece e como os usuários (atores) interagem com ele.
  • Principais elementos:
    • Atores: Pessoas ou sistemas externos que usam o sistema.
    • Casos de uso: Ações realizadas pelo sistema.
    • Relacionamentos: Mostram como atores e casos de uso se conectam.
  • Aplicações práticas: e-commerce, bancos, sistemas de ensino.
  • Objetivo: Melhorar a comunicação entre desenvolvedores, clientes e usuários.

Diagramas de Classes

referencia: https://slideplayer.com.br/slide/13956163/

  • Representam a estrutura estática do sistema.
  • Cada classe mostra seus atributos (informações) e métodos (ações que podem ser realizadas).
  • Exemplo: Classe “Usuário” com atributos como nome, email e métodos como logar().

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

Diagramas de Sequência

Referencia: https://medium.com/documenta%C3%A7ao-uml/introdu%C3%A7%C3%A3o-ao-diagrama-de-sequ%C3%AAncia-1ea5e9563594

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

  • Mostram como os objetos interagem no tempo para realizar funções.
  • Utilizados para representar o fluxo de mensagens entre usuários, sistemas e bases de dados.
  • Exemplo: Usuário adiciona produto ao carrinho → Sistema processa → Estoque é atualizado.


2. Modelagem de Dados Relacional ​​

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

Fundamentos:

  • Entidades: Representam objetos reais, como Clientes, Produtos, Pedidos.
  • Relacionamentos: Como esses objetos se conectam (ex.: Cliente faz Pedido).

Normalização dos dados:

  • 1ª Forma Normal (1NF): Cada campo com um único valor.
  • 2ª Forma Normal (2NF): Eliminar dependências parciais em chaves compostas.
  • 3ª Forma Normal (3NF): Eliminar dependências transitivas.

Melhores práticas:

  • Chaves primárias e chaves estrangeiras para manter integridade dos dados.
  • Indexação para melhorar a performance de consultas.
  • Monitoramento contínuo do banco para otimizar consultas grandes.

Exemplo de aplicação:

  • Em sistemas de vendas, é necessário dividir dados em tabelas como Clientes, Pedidos, Produtos para evitar repetição de informações.

3. Modelagem de Requisitos de Software ​​

Requisitos de Software:

  • Requisitos Funcionais:
    Descrevem o que o sistema faz (ex.: “Usuário pode se cadastrar”).
  • Requisitos Não Funcionais:
    Definem qualidades do sistema (ex.: “O sistema deve carregar em 2 segundos”).
  • Requisitos de Domínio:
    Específicos de uma área (ex.: um sistema médico que precisa seguir normas de saúde).

Levantamento de requisitos:

  • Técnicas: entrevistas, questionários, observação direta, workshops.
  • Ferramentas: UML, JIRA, Trello.

Documentação:

  • Especificação de Requisitos de Software (SRS): documento técnico detalhado.
  • User Stories (Histórias de Usuário):
    Exemplo: “Como cliente, quero adicionar produtos ao carrinho para finalizar minha compra.”

Requisitos em Metodologias Ágeis:

  • Flexibilidade:
    Permitem mudanças rápidas durante o desenvolvimento.
  • Priorização:
    Entregam primeiro o que é mais importante.
  • User Stories e Critérios de Aceitação:
    Validam se a funcionalidade foi entregue corretamente.

Quadro Resumo para Aula

TemaPontos PrincipaisExemplos
Diagramas de Casos de UsoComo o usuário interage com o sistemaLoja online, Banco, Escola
Diagramas de ClassesEstrutura de dados do sistemaCadastro de clientes
Diagramas de SequênciaOrdem de interação entre objetosCompra online
Modelagem de DadosOrganização eficiente de informaçõesBanco de dados de vendas
Modelagem de RequisitosO que o sistema faz e como deve se comportarCadastro rápido e seguro

Sugestão para Apresentação Oral

Você pode dizer algo assim:

“Hoje vamos conhecer ferramentas essenciais para criar sistemas modernos: vamos entender como desenhar os requisitos de um sistema, organizar seus dados, planejar suas funções e testar se tudo está funcionando corretamente.”

Tabela de Jargões e Significados

JargãoSignificado
UML (Unified Modeling Language)Linguagem usada para desenhar diagramas que explicam como um sistema funciona.
Diagrama de Casos de UsoDesenho que mostra o que o sistema faz e como os usuários (atores) interagem com ele.
AtorQuem interage com o sistema (pessoa, sistema ou dispositivo).
Caso de UsoAção ou funcionalidade que o sistema deve realizar.
Relacionamento (UML)Ligação entre atores e casos de uso ou entre casos de uso diferentes.
Diagrama de ClassesRepresentação das partes de um sistema: suas informações (atributos) e ações (métodos).
Diagrama de SequênciaMostra a ordem em que as ações acontecem entre os objetos de um sistema.
Linha de VidaRepresenta o tempo de vida de um objeto enquanto ele interage no sistema.
Mensagem SíncronaComunicação onde quem envia espera uma resposta antes de continuar.
Mensagem AssíncronaComunicação onde quem envia não precisa esperar resposta para continuar.
Modelagem de Dados RelacionalTécnica para organizar as informações em bancos de dados, evitando erros e repetição.
EntidadeRepresentação de um objeto ou conceito real (ex: cliente, produto).
Relacionamento (Dados)Conexão entre duas entidades no banco de dados.
NormalizaçãoProcesso para organizar os dados em tabelas de forma correta, evitando repetições.
Chave PrimáriaIdentificador único de cada registro numa tabela (ex: CPF de uma pessoa).
Chave EstrangeiraLigação entre duas tabelas diferentes.
User StoryPequena história escrita do ponto de vista do usuário dizendo o que ele precisa fazer.
Critério de AceitaçãoCondições que mostram que uma funcionalidade foi feita corretamente.
MoSCoWTécnica para priorizar tarefas: Must (deve ter), Should (deveria ter), Could (poderia ter), Won’t (não terá agora).
Levantamento de RequisitosProcesso de descobrir tudo o que o sistema precisa fazer.
SRS (Software Requirements Specification)Documento formal que descreve todos os requisitos do sistema.
Framework ÁgilModelo de trabalho que permite fazer entregas rápidas e adaptáveis no desenvolvimento de software.
CI/CD (Integração Contínua/Entrega Contínua)Técnicas para automatizar testes e entregas de novos códigos em sistemas de forma rápida e segura.
WorkshopReunião prática e interativa para resolver problemas ou levantar informações.
ProtótipoModelo simples de um sistema feito para testar ideias antes de fazer a versão final.
Elicitação de RequisitosColeta de informações necessárias para definir o que o sistema precisa fazer.

Resumo Geral para Apresentação — Sistemas, Modelagem e Testes


1. Modelagem de Dados Relacionais

  • Conceitos-chave:
    Entidades (como “Cliente” ou “Produto”), Relacionamentos e Normalização (1ª, 2ª e 3ª Formas Normais)​.
  • Objetivo:
    Garantir organização dos dados, evitando redundância e melhorando a integridade.
  • Exemplos:
    Cadastro de clientes, pedidos em lojas virtuais.

2. Modelagem de Dados Não Relacionais

  • Tipos de bancos:
    • Documentos: Estruturam informações como JSON (ex: MongoDB).
    • Grafos: Representam conexões complexas (ex: Redes Sociais)​.
    • Chave-Valor: Para acesso ultra rápido de informações, como sessões de usuários​.
  • Importância:
    Usados onde precisamos de alta escalabilidade, consultas rápidas ou análise de redes.

3. Diagramas UML: Casos de Uso, Classes e Sequências

  • Casos de Uso:
    Mostram como usuários interagem com o sistema​.
  • Classes:
    Estruturam informações e métodos em sistemas​​.
  • Sequência:
    Representam o fluxo temporal de interações entre objetos​​.
  • Exemplos práticos:
    E-commerce (Cliente → Carrinho → Pagamento → Estoque).

4. Requisitos de Software

  • Funcionais:
    Definem o que o sistema faz (ex: “Cadastrar usuário”).
  • Não Funcionais:
    Definem qualidades do sistema (ex: “Tempo de resposta menor que 2 segundos”).
  • User Stories:
    Pequenas histórias que ajudam a entender melhor o que o usuário precisa.

5. Testes de Software

Testes Funcionais

  • O que são:
    Verificam se o sistema cumpre seus requisitos.
  • Técnicas:
    • Caixa Preta (testar sem saber o código).
    • Testes de equivalência, valor-limite.
    • Automação de testes (ex: usando pytest).
  • Importância:
    Garante que o sistema faça exatamente o que foi prometido.

Testes Não Funcionais ​

  • Tipos:
    • Desempenho:
      Avalia velocidade, escalabilidade e estabilidade.
    • Segurança:
      Testa vulnerabilidades e proteção de dados.
    • Usabilidade:
      Garante facilidade de uso e compatibilidade com vários dispositivos.
  • Exemplos reais:
    • Black Friday: Testes de carga para aguentar milhões de acessos​.
    • Aplicativos bancários: Testes de segurança e compatibilidade em vários celulares​.

6. Planejamento e Gestão de Testes

  • Planejamento de Testes:
    Definição de escopo, cronograma e recursos necessários​.
  • Gestão de Defeitos:
    • Identificar.
    • Registrar (documentar claramente).
    • Monitorar (corrigir e validar).
  • Testes Ágeis:
    Testar continuamente usando integração contínua (CI/CD).

Resumo Final para Aula

TemaFocoExemplos
Modelagem RelacionalOrganização e estruturação de dadosBanco de dados de vendas
Modelagem Não RelacionalEficiência e escalabilidadeMongoDB, Redis, Neo4j
Diagramas UMLEntender funcionamento e interaçõesSistema de Compras Online
RequisitosDefinir o que fazer e como se comportarCadastrar usuário rapidamente
Testes FuncionaisVerificar se tudo funciona como planejadoCadastro de clientes
Testes Não FuncionaisGarantir qualidade, segurança e desempenhoTeste de carga em Black Friday

💬 Sugestão de Introdução para Apresentação:

“Hoje vamos explorar como projetar sistemas, organizar dados, definir funções e testar tudo para garantir que a tecnologia funcione de maneira rápida, segura e fácil de usar no nosso dia a dia.”

pt_BRPortuguese