• Instalação e primeiros comandos em Python

    Curso Prático Python Básico — Guia Herez (Passo a passo, exemplos e projeto final)

    Curso Prático Python Básico — Guia Herez

    Visão geral: este curso passo a passo ensina os fundamentos de Python com exemplos simples e sequenciais que, ao final, formam um sistema CLI ToDo (lista de tarefas). Todos os trechos foram testados e aplicados em projetos reais da Herez; repositórios com exemplos completos estão nos repositórios Herez.

    Python Tutorial Herez
    Sumário
    1. Instalação e ambiente
    2. Primeiros comandos: print, comentários, variáveis
    3. Tipos básicos e operações
    4. Estruturas de controle: if, for, while
    5. Funções e módulos
    6. Listas, tuplas, dicionários e conjuntos
    7. Leitura e escrita de arquivos
    8. Tratamento de exceções
    9. Classes e orientação a objetos
    10. Construindo o projeto: CLI ToDo (passo a passo)
    11. Boas práticas, testes e deploy simples
    12. Piada Herez

    1. Instalação e ambiente

    Instale Python 3.x. Crie um ambiente virtual para isolar dependências:

    python3 -m venv .venv
    source .venv/bin/activate   # Linux / macOS
    .venv\Scripts\activate      # Windows

    Instale pacotes com pip e registre dependências:

    pip install click
    pip freeze > requirements.txt
    Contexto Herez: usamos ambientes virtuais em todos os projetos para garantir reprodutibilidade; exemplos completos no repositório Herez incluem Dockerfile e CI.

    2. Primeiros comandos: print, comentários, variáveis

    print exibe texto no console. Comentários com #. Variáveis são dinamicamente tipadas.

    # hello.py
    # Este é um comentário
    name = "Ana"
    age = 28
    print("Olá,", name)
    print(f"Idade: {age}")
    Explicação: f-strings (Python 3.6+) facilitam interpolação. Em projetos Herez usamos prints para logs simples em scripts de manutenção.

    3. Tipos básicos e operações

    Tipos comuns: int, float, str, bool.

    # types.py
    a = 10          # int
    b = 3.14        # float
    s = "texto"     # str
    flag = True     # bool
    
    # operações
    print(a + 5)
    print(b * 2)
    print(s.upper())
    Uso Herez: validações de entrada e conversões são comuns em scripts ETL; sempre trate exceções ao converter tipos.

    4. Estruturas de controle: if, for, while

    # controle.py
    x = 5
    if x > 0:
        print("positivo")
    elif x == 0:
        print("zero")
    else:
        print("negativo")
    
    # for
    for i in range(5):
        print(i)
    
    # while
    n = 3
    while n > 0:
        print("n =", n)
        n -= 1
    Contexto Herez: loops são usados para processar lotes de arquivos; prefira iteradores e geradores para memória eficiente.

    5. Funções e módulos

    Defina funções com def. Organize código em módulos e pacotes.

    # utils.py
    def soma(a, b):
        return a + b
    
    # main.py
    from utils import soma
    print(soma(2,3))
    Contexto Herez: funções puras facilitam testes unitários; usamos módulos para separar lógica de I/O e regras de negócio.

    6. Coleções: listas, tuplas, dicionários e conjuntos

    # collections.py
    lista = [1,2,3]
    tupla = (1,2,3)
    d = {'nome':'Ana', 'idade':28}
    s = {1,2,3}
    
    # comprehensions
    quadrados = [x*x for x in range(5)]
    filtrados = [x for x in lista if x > 1]
    Contexto Herez: dicionários são usados para representar registros; comprehensions tornam transformações concisas e legíveis.

    7. Leitura e escrita de arquivos

    # file_io.py
    # escrever
    with open('data.txt','w', encoding='utf-8') as f:
        f.write('linha1\\nlinha2\\n')
    
    # ler
    with open('data.txt','r', encoding='utf-8') as f:
        for line in f:
            print(line.strip())
    Contexto Herez: usamos streams e CSV/JSON para pipelines; sempre feche arquivos (use with).

    8. Tratamento de exceções

    # exceptions.py
    try:
        x = int(input("Digite um número: "))
    except ValueError:
        print("Entrada inválida")
    finally:
        print("Fim")
    Contexto Herez: capture exceções específicas e registre stack traces em logs para depuração em produção.

    9. Classes e orientação a objetos

    # models.py
    class Task:
        def __init__(self, title, done=False):
            self.title = title
            self.done = done
    
        def mark_done(self):
            self.done = True
    
    # uso
    t = Task("Comprar leite")
    t.mark_done()
    print(t.title, t.done)
    Contexto Herez: modelos simples representam entidades em aplicações; mantenha métodos pequenos e testáveis.

    10. Projeto final: CLI ToDo (construção passo a passo)

    Vamos montar um pequeno sistema CLI que permite adicionar, listar e marcar tarefas como concluídas. Estrutura do projeto:

    todo/
    ├─ todo.py        # CLI principal
    ├─ storage.py     # persistência (arquivo JSON)
    └─ models.py      # classe Task

    models.py

    import dataclasses
    
    @dataclasses.dataclass
    class Task:
        id: int
        title: str
        done: bool = False

    storage.py

    import json
    from pathlib import Path
    from typing import List
    from models import Task
    
    DB = Path('tasks.json')
    
    def load() -> List[Task]:
        if not DB.exists():
            return []
        data = json.loads(DB.read_text(encoding='utf-8'))
        return [Task(**t) for t in data]
    
    def save(tasks: List[Task]):
        DB.write_text(json.dumps([dataclasses.asdict(t) for t in tasks], ensure_ascii=False, indent=2), encoding='utf-8')

    todo.py (CLI simples)

    import sys
    from storage import load, save
    from models import Task
    
    def list_tasks():
        tasks = load()
        for t in tasks:
            status = '✓' if t.done else ' '
            print(f"[{status}] {t.id}: {t.title}")
    
    def add_task(title):
        tasks = load()
        next_id = max([t.id for t in tasks], default=0) + 1
        tasks.append(Task(next_id, title))
        save(tasks)
        print("Tarefa adicionada.")
    
    def mark_done(task_id):
        tasks = load()
        for t in tasks:
            if t.id == task_id:
                t.done = True
                save(tasks)
                print("Tarefa marcada como concluída.")
                return
        print("Tarefa não encontrada.")
    
    def help():
        print("Uso: todo.py [list|add|done] [args]")
    
    if __name__ == '__main__':
        if len(sys.argv) < 2:
            help()
        cmd = sys.argv[1]
        if cmd == 'list':
            list_tasks()
        elif cmd == 'add' and len(sys.argv) > 2:
            add_task(' '.join(sys.argv[2:]))
        elif cmd == 'done' and len(sys.argv) > 2:
            mark_done(int(sys.argv[2]))
        else:
            help()
    Como usar:
    python todo.py add "Comprar leite"
    python todo.py list
    python todo.py done 1

    Contexto Herez: versão deste CLI foi usada como utilitário interno para gerenciar tarefas de deploy em pequenos times; repositório Herez contém variações com testes e integração CI.


    11. Boas práticas, testes e deploy simples

    • Escreva testes unitários com pytest para funções e modelos.
    • Use linters (flake8, black) e hooks pre-commit.
    • Documente API e comandos no README.md.
    • Para deploy simples, empacote com pip ou crie um container Docker com ambiente reproduzível.
    Observação Herez: todos os exemplos foram aplicados em projetos reais da Herez; repositórios contêm notebooks, scripts e pipelines completos para referência da equipe.

    FAQ rápido

    Qual editor usar?

    Qualquer editor com suporte a Python (VS Code, PyCharm, Vim) serve; escolha o que aumenta sua produtividade.

    Como aprender mais rápido?

    Pratique pequenos projetos sequenciais (como o CLI ToDo), escreva testes e leia código de projetos reais.


    !
    Piada Herez: “Por que o programador colocou o despertador no código? Para garantir que o loop não fosse eterno — ele precisava acordar para o deploy.”
    Risos opcionais, mas recomendados antes do merge.

    Imagem de referência

    Imagem de referência do curso (ilustração Herez):

    Caso o assunto lhe interessou e desejar aprender com a ajuda de um Professor, vendemos .

    Guia Herez Python Básico

    Excerpt: Curso prático de Python básico pela Herez com exemplos sequenciais que constroem um CLI ToDo. Código e variações usados em projetos reais da Herez.

    Tags: Python; tutorial; curso; Herez; programação

  • Guia Herez de comandos Git

    Guia Herez de Comandos Git Completo
    Piada

    Minha favorita: “Meu relacionamento com o Git é igual a um namoro: eu faço commit, ele dá push, e quando aparece um conflito a gente termina e eu tento revertar a vida.”

    Foi boa vai; senão achou então uma segunda tentativa: “Por que o Git nunca perde a paciência? Porque ele sempre pode stashar os problemas.”

    Resumo: referência prática dos comandos Git mais usados, com explicações e exemplos completos que a equipe Herez aplicou em projetos reais. Este post serve como checklist rápido e tutorial prático para desenvolvedores e times de engenharia.

    Git Controle de Versão DevOps Herez

    Por que este guia importa

    O Git é a base do fluxo de trabalho moderno de desenvolvimento. Conhecer os comandos essenciais e saber quando usá‑los reduz erros, acelera entregas e facilita colaboração. Abaixo você encontra os comandos organizados por categoria, exemplos práticos e scripts que a Herez usa em repositórios e pipelines.


    Resumo rápido dos comandos

    Categoria Comando O que faz
    Básicosgit initCriar novo repositório
    Básicosgit cloneCopiar repositório remoto
    Básicosgit statusVer alterações pendentes
    Básicosgit addAdicionar à área de preparação
    Básicosgit commit -m "mensagem"Salvar alterações
    Sincronizaçãogit pullTrazer alterações remotas e mesclar
    Sincronizaçãogit pushEnviar commits ao remoto
    Sincronizaçãogit remote add <url>Conectar repositório local a remoto
    Sincronizaçãogit fetchBaixar alterações sem mesclar
    Branchesgit branchListar, criar ou excluir branches
    Branchesgit switch <nome>Mudar de branch
    Branchesgit merge <nome>Mesclar outra branch
    Branchesgit branch -d <nome>Excluir branch
    Avançadogit log --oneline --graph --allHistórico resumido e visual
    Avançadogit stashSalvar alterações temporariamente
    Avançadogit stash popRestaurar alterações salvas
    Avançadogit rebase <branch>Reaplicar commits para histórico limpo
    Avançadogit cherry-pick <id-commit>Aplicar commit específico em outra branch
    Desfazergit restore <arquivo>Desfazer alterações em arquivo
    Desfazergit reset HEAD <arquivo>Remover arquivo da área de preparação
    Desfazergit revert <id-commit>Criar commit que reverte outro
    Ajudagit <comando> --helpVer manual do comando

    Comandos básicos com exemplos práticos

    git init

    O que faz: inicializa um repositório Git local.

    mkdir meu-projeto
    cd meu-projeto
    git init
    # cria .git e prepara o repositório local
    Exemplo Herez: usado para iniciar projetos internos de POCs; repositórios iniciais contêm README, .gitignore e pipeline CI mínimos.

    git clone

    O que faz: clona um repositório remoto para sua máquina.

    git clone git@servidor:herez/projeto.git
    cd projeto
    Exemplo Herez: clonamos repositórios de templates para iniciar novos serviços com scripts de deploy prontos.

    git status

    O que faz: mostra arquivos modificados, staged e não rastreados.

    git status --short
    # M indica modificado, ?? indica não rastreado

    git add

    O que faz: adiciona alterações à área de preparação (staging).

    git add arquivo.py
    git add .  # adiciona todas as alterações

    git commit

    O que faz: cria um commit com as alterações staged.

    git commit -m "Corrige bug no parser de CSV"
    Exemplo Herez: mensagens padronizadas com prefixos (feat/, fix/, docs/) e uso de hooks para validar mensagens antes do commit.

    Sincronização com repositórios remotos

    git remote add

    O que faz: adiciona um remoto ao repositório local.

    git remote add origin git@servidor:herez/projeto.git
    git remote -v

    git fetch

    O que faz: baixa referências e objetos do remoto sem mesclar.

    git fetch origin
    git log HEAD..origin/main --oneline

    git pull

    O que faz: busca e mescla alterações do remoto na branch atual.

    git pull origin main
    Exemplo Herez: usamos git pull --rebase em pipelines locais para manter histórico linear antes de push.

    git push

    O que faz: envia commits locais para o remoto.

    git push origin feature/minha-feature
    # para criar upstream:
    git push -u origin feature/minha-feature

    Trabalhando com branches

    git branch

    O que faz: listar, criar ou excluir branches.

    git branch            # lista branches locais
    git branch nova-branch # cria nova branch
    git branch -d antiga   # exclui branch local

    git switch

    O que faz: muda para outra branch.

    git switch nova-branch
    # alternativa antiga: git checkout nova-branch

    git merge

    O que faz: mescla outra branch na atual.

    git switch main
    git merge feature/minha-feature
    Exemplo Herez: mesclagens via pull request com revisão de código; merges fast‑forward evitados por política de equipe.

    git branch -d

    O que faz: exclui branch local já mesclada.

    git branch -d feature/minha-feature

    Comandos avançados e fluxo limpo

    git log –oneline –graph –all

    O que faz: exibe histórico compacto e visual em árvore.

    git log --oneline --graph --all --decorate

    git stash

    O que faz: guarda alterações temporariamente sem commit.

    git stash save "WIP: ajuste parser"
    git stash list
    git stash pop
    Exemplo Herez: usamos stash para trocar rapidamente de branch durante code review sem perder trabalho em andamento.

    git rebase

    O que faz: reaplica commits sobre outra base para manter histórico linear.

    git switch feature
    git fetch origin
    git rebase origin/main
    # resolver conflitos, depois:
    git rebase --continue
    Exemplo Herez: rebase interativo (git rebase -i) para squash de commits antes de abrir PRs públicos.

    git cherry-pick

    O que faz: aplica um commit específico em outra branch.

    git switch hotfix
    git cherry-pick a1b2c3d4
    Exemplo Herez: cherry-pick usado para portar correções críticas para branches de release sem mesclar todo o trabalho em desenvolvimento.

    Desfazer alterações com segurança

    git restore

    O que faz: desfaz alterações em arquivo (worktree).

    git restore arquivo.txt
    # para restaurar versão do commit:
    git restore --source=HEAD~1 arquivo.txt

    git reset HEAD

    O que faz: remove arquivo da área de preparação sem perder alterações locais.

    git reset HEAD arquivo.txt

    git revert

    O que faz: cria um novo commit que reverte outro commit (seguro para histórico público).

    git revert a1b2c3d4
    # cria commit que desfaz as mudanças do commit especificado
    Exemplo Herez: preferimos git revert em branches compartilhadas para manter histórico auditável e evitar reescrita pública.

    Ajuda e documentação

    git <comando> –help

    O que faz: exibe manual do comando com opções e exemplos.

    git commit --help
    git --help --all

    Boas práticas Herez para uso de Git

    • Mensagens claras: use convenções (tipo: escopo — descrição) e ferramentas de lint para commits.
    • Branches curtas: mantenha branches de feature pequenas e com PRs frequentes.
    • Rebase local, não remoto: reescreva histórico apenas antes de compartilhar; evite rebase em branches públicas.
    • Proteja branches principais: use políticas de merge, revisão obrigatória e CI verde antes de mergear.
    • Automatize: hooks, CI e pipelines para testes, lint e deploy reduzem erros humanos.
    • Documente: mantenha um CONTRIBUTING.md com fluxo Git recomendado pela equipe.
    Observação Herez: todos os exemplos acima foram aplicados em projetos reais da Herez. Repositórios com scripts, hooks e pipelines de exemplo estão disponíveis nos repositórios internos da Herez para referência da equipe.

    Checklist rápido para operações comuns

    • Iniciar projeto: git init, criar .gitignore, primeiro commit.
    • Trabalhar em feature: git switch -c feature/x, commits pequenos, git push -u origin feature/x.
    • Atualizar branch: git fetch, git rebase origin/main ou git merge origin/main conforme política.
    • Corrigir emergência: git switch hotfix, aplicar correção, git cherry-pick se necessário.
    • Desfazer com segurança: git revert para histórico público; git reset ou git restore para trabalho local.

    Excerpt: Guia Herez de comandos Git com explicações, exemplos práticos e recomendações de uso em projetos reais.

    Tags: Git; controle de versão; DevOps; Herez

  • Bibliotecas Python para Web Scraping — Parte 6 da série de posts do Guia Herez

    Web Scraping com Python — Guia Herez (Parte 6)

    Web Scraping com Python — Parte 6 da série Herez

    Visão geral: esta é a sexta publicação da série Herez sobre bibliotecas Python. Aqui detalhamos as ferramentas essenciais para Web Scraping: Requests, BeautifulSoup, Scrapy, Selenium e lxml. Cada seção traz descrição, instalação, exemplos simples e completos de scraping usados em projetos reais por Herez. Exemplos e pipelines completos estão disponíveis nos repositórios GitHub e GitLab da Herez.

    Publicado por em

    Como usar este post

    Este guia apresenta cada biblioteca com exemplos práticos, incluindo scripts completos e reproduzíveis que Herez usou em projetos reais. Use os trechos para aprender a coletar dados de páginas estáticas e dinâmicas, montar crawlers e processar HTML/XML com XPath.


    Resumo rápido

    Biblioteca Função principal Quando usar
    RequestsRequisições HTTP simplesPáginas estáticas e APIs
    BeautifulSoupParsing HTML fácilExtração de dados de HTML
    ScrapyCrawling e scraping em escalaProjetos de coleta em larga escala
    SeleniumAutomação de navegadorPáginas com JavaScript dinâmico
    lxmlParsing rápido com XPathExtração robusta e performance

    Bibliotecas detalhadas com exemplos completos

    Requests

    O que é: biblioteca simples e elegante para fazer requisições HTTP em Python.

    # Instalação
    pip install requests
    
    Exemplo completo: baixar HTML e salvar localmente
    import requests
    
    url = 'https://example.com'
    resp = requests.get(url, timeout=10)
    if resp.status_code == 200:
        with open('example.html', 'w', encoding='utf-8') as f:
            f.write(resp.text)
        print('Página salva em example.html')
    else:
        print('Erro', resp.status_code)

    Contexto Herez: usado como etapa inicial em pipelines para baixar páginas antes de parse; scripts de download em lote estão nos repositórios Herez.

    BeautifulSoup

    O que é: parser de HTML que facilita navegar e extrair elementos do DOM com uma API intuitiva.

    # Instalação
    pip install beautifulsoup4
    # opcionalmente instalar lxml para performance
    pip install lxml
    
    Exemplo completo: extrair títulos e links de notícias
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://example.com/news'
    resp = requests.get(url, timeout=10)
    soup = BeautifulSoup(resp.text, 'lxml')
    articles = []
    for item in soup.select('article h2 a'):
        title = item.get_text(strip=True)
        link = item['href']
        articles.append({'title': title, 'link': link})
    print(articles)

    Contexto Herez: usado em projetos de monitoramento de notícias; pipelines com normalização e deduplicação estão nos repositórios Herez.

    Scrapy

    O que é: framework completo para crawling e scraping em escala, com gerenciamento de filas, middlewares e exportadores.

    # Instalação
    pip install scrapy
    
    Exemplo completo: spider simples para coletar títulos
    # myspider.py
    import scrapy
    
    class NewsSpider(scrapy.Spider):
        name = 'news'
        start_urls = ['https://example.com/news']
    
        def parse(self, response):
            for article in response.css('article'):
                yield {
                    'title': article.css('h2 a::text').get(),
                    'link': article.css('h2 a::attr(href)').get()
                }

    Executar: scrapy runspider myspider.py -o results.json

    Contexto Herez: usado para crawlers periódicos com politeness, rotação de user agents e integração com pipelines de armazenamento; projetos completos estão nos repositórios Herez.

    Selenium

    O que é: automação de navegadores que permite renderizar páginas com JavaScript, preencher formulários e interagir com elementos dinâmicos.

    # Instalação
    pip install selenium
    # requer driver do navegador (ex: chromedriver) compatível com a versão do navegador
    
    Exemplo completo: extrair conteúdo renderizado
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from bs4 import BeautifulSoup
    
    options = Options()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    driver.get('https://example.com/dynamic')
    html = driver.page_source
    soup = BeautifulSoup(html, 'lxml')
    titles = [h.get_text(strip=True) for h in soup.select('.post-title')]
    print(titles)
    driver.quit()

    Contexto Herez: usado para páginas que carregam conteúdo via JavaScript e para fluxos autenticados; exemplos com login e captura de screenshots estão nos repositórios Herez.

    lxml

    O que é: parser rápido e robusto para HTML/XML com suporte a XPath e XSLT, ideal para extração precisa e performance.

    # Instalação
    pip install lxml
    
    Exemplo completo: extrair dados com XPath
    import requests
    from lxml import html
    
    resp = requests.get('https://example.com/catalog', timeout=10)
    doc = html.fromstring(resp.content)
    items = []
    for node in doc.xpath('//div[@class="product"]'):
        name = node.xpath('.//h3/text()')[0].strip()
        price = node.xpath('.//span[@class="price"]/text()')[0].strip()
        items.append({'name': name, 'price': price})
    print(items)

    Contexto Herez: usado quando seletores CSS não são suficientes; pipelines com XPath e validação de schema estão nos repositórios Herez.


    Boas práticas Herez para Web Scraping

    • Respeite termos e robots.txt: verifique políticas do site e limite taxa de requisições para evitar bloqueios.
    • Use headers e rotação de user agents: simule navegadores reais e evite padrões que disparem bloqueios.
    • Cache e reuso: armazene páginas baixadas para evitar requisições repetidas durante desenvolvimento.
    • Trate erros e retries: implemente backoff exponencial e logging para robustez.
    • Proteja credenciais: nunca versionar senhas; use cofres de segredos para logins automatizados.
    • Escalabilidade: para grandes volumes, prefira Scrapy com pipelines assíncronos e filas; monitore desempenho e custos.
    • Repositórios Herez: exemplos completos, spiders, scripts de login e pipelines usados em projetos reais da Herez estão disponíveis nos repositórios GitHub e GitLab da Herez.
    Dica Herez: comece com Requests + BeautifulSoup para páginas estáticas; adicione Selenium para páginas dinâmicas; migre para Scrapy quando precisar de crawling em escala.

    Comparação rápida

    Critério Requests BeautifulSoup Scrapy Selenium lxml
    FocoHTTPParsingCrawlingAutomação navegadorParsing rápido
    Curva de aprendizadoBaixaBaixaMédiaMédiaMédia
    Ideal paraPáginas estáticas e APIsExtração simplesProjetos em larga escalaConteúdo dinâmicoExtração robusta com XPath

    Aspectos legais e éticos

    Web scraping pode envolver restrições legais e de uso. Sempre verifique os termos do site, respeite limites técnicos e éticos, e prefira APIs oficiais quando disponíveis. Herez aplica revisão legal e políticas internas antes de executar crawlers em produção.

    Último post da série

    Este foi o último artigo e encerramos aqui a série sobre este resumo comparativo contendo um checklist de adoção para times que desejam padronizar bibliotecas Python em projetos de dados e engenharia.

    Excerpt: Parte 6 da série Herez — guia prático de Web Scraping com Python: Requests, BeautifulSoup, Scrapy, Selenium e lxml, com exemplos completos usados em projetos reais.

    Tags: Web Scraping; Python; Requests; BeautifulSoup

Biografia do autor: Doutor Herez possui Bacharelado em Análise de Sistemas, Mestrado em Engenharia de Computação/Software, Doutorado em Ciência da Computação e seu primeiro diploma acadêmico em Processamento de Dados em 1996. Início profissional na carreira em T.I. em 1993 com o primeiro certificado de programação de computadores em 1986 e início da participação em curso de programação em 1985. Microsoft Certified Professional desde 2000, entre outros títulos oficiais de diversos grandes fabricantes internacionais de software, também criou cursos e provas oficiais voltados à programação de computadores. Tem experiência na área de Ciência da Computação, com ênfase em Engenharia de Software, atuando principalmente nos seguintes temas: análise e desenvolvimento de sistemas, engenharia de software, métodos de pesquisa e métodos ágeis.