Skip to content

Instantly share code, notes, and snippets.

@cuducos
Last active October 29, 2022 23:14
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cuducos/2035fe99e44d9c9a8a1b39d2cc15bc6d to your computer and use it in GitHub Desktop.
Save cuducos/2035fe99e44d9c9a8a1b39d2cc15bc6d to your computer and use it in GitHub Desktop.
Andromedev 2020

Calculadora do Cidadão

A Calculadora do Cidadão é um pacote em Python para efetuar correção monetária de valores, muito útil em análise históricas. A ideia é criar uma interface unificada para diversos índices econômicos — atualmente temos família IPCA, IGPM, Taxa Selic e FED (EUA).

Repositório

https://github.com/cuducos/calculadora-do-cidadao

O que eu ganho participando desse projeto?

Tecnicamente falando, contribuir para esse projeto é uma experiência excelente em termos de API-Driven Development com a segurança de cheacgem de tipos mesmo no Python.

Do ponto de vista cívico, esse projeto ajuda iniciativas que coletam a analizam séries históricas de preços, gastos ou qualquer valor em Reais. Principalmente para quem interesse em dar suporte a matérias de jornalismo de dados, pode ter uma ferramenta (e familiariade com ela) com os usos de caso desse projeto.

Por fim, esse é um repositório pequeno e há espaço para colaboração futura ou mesmo assumir a manutenção do pacote de forma mais definitiva!

Quais tecnologias e ferramentas devem ser utilizadas?

Links úteis

Qual perfil de aprendiz se espera?

O perfil ideal é uma pessoa interessada em APIs (não APIs web, mas desenvolver programas que serão utilizados por quem vai desenvolver outros programas) e em raspagem, manipulação e análise de dados.

Você reparou que eu disse pessoa interessada e não pessoa que já sabe tudo, né? Ufa, que bom. Só para confirmar 💜

Cronograma sugerido

1ª fase de desenvolvimento

2ª fase de desenvolvimento

  • Implementar TR (Taxa Referencial) como mais um adaptador
  • Implementar INPC (Íncide Nacional de Preços ao Consumidor) como mais um adaptador

3ª fase de desenvolvimento

  • Implementar compatibilidade com DataFrame do Pandas
  • Implementar compatibilidade com tabela da Rows

Adicional

  • Desenvolver módulo para tratamento de conversões cambiais

Mentoria

Eu, Cuducos, sou o criador desse projeto e me ofereço para mentoria a quem quiser colaborar para o projeto. Sou co-fundador da da Operação Serenata de Amor, apaixonado por comunidades acolhedoras de código-aberto, doutor em sociologia, e trabalho com tecnologia há mais de 15 anos, e com Python há mais de 7 anos — principalmente na área de tecnologia cívica, tendo colaborado com Open Knowledge Brasil, Banco Mundial, IBCCRIM, Radar Legislativo entre outros.

Contate-me

cuducos#5506 no Discord e @cuducos em quase todas as outras coisas: GitHub, Telegram, Twitter, por exemplo.

Django Public Admin

O Django Public Admin surgiu para ajudar projetos que querem disponibilizar dados publicamente, para humanos (ou seja, sem ser via API), utilizando todo o poder do Django Admin — mas sem precisar criar e gerenciar contas de usuários, login etc. Atualmente essa extensão do Django é utilizada por projetos como a Operação Serenata de Amor e Dados Abertos de Feira.

Repositório

https://github.com/cuducos/django-public-admin

O que eu ganho participando desse projeto?

Tecnicamente falando, contribuir para esse projeto é uma experiência excelente para como o Django funciona por debaixo dos panos, já que há muita interface com o código fonte do Django e com programação orientada a objetos para mudar o comportamento padrão do sistema. E, claro, mercado de trabalho para gente que conhece o Django profundamente não falta!

Do ponto de vista cívico, esse projeto ajuda iniciativas que coletam dados públicos e oferecem esses dados em plataformas mais potentes e mais amigáveis para público leigo em tecnologia interagir e pesquisar informações em grandes volumes de dados públicos, como o Jarbas (e, futuramente, o painel de controle em desenvolvimento pela comunidade do Dados Abertos de Feira). Contribuir para esse projeto pode ser, logo, uma forma de entrar com o pé direito na área de tecnologia cívica.

Por fim, esse é um repositório pequeno e há espaço para colaboração futura ou mesmo assumir a manutenção do pacote de forma mais definitiva!

Quais tecnologias e ferramentas devem ser utilizadas?

  • Python
  • Django (não há nenhuma outra dependência no pacote)
  • Poetry para o empacotamento
  • Git e GitHub para colaboração com o código fonte

Links úteis

  • Esse pull request mostra como o projeto nasceu dentro da Operação Serenata /de Amor, depois, se tornou um pacote independente

  • Esse outro pull request mostra como foi simples a integrtação no Dados Abertos de Feira

Qual perfil de aprendiz se espera?

O perfil ideal é uma pessoa interessada em web, não só na “ponta do iceberg” de framework X ou Y, mas em entender como a arquiteura web funciona: protocolo HTTP, arquiteturas model-view-contoller em geral e programação orientada a objetos em Python.

Você reparou que eu disse pessoa interessada e não pessoa que já sabe tudo, né? Ufa, que bom. Só para confirmar 💜

Cronograma sugerido

1ª fase de desenvolvimento

  • Passeio guiado no código-fonte do pacote
  • Instalação experimental e técnicas de desenvolvimento de pacotes no Python
  • Investigação de um bug existente

2ª fase de desenvolvimento

3ª fase de desenvolvimento

  • Permitir mais de uma instância do Django Públic Admin e/ou do Django Admin em paralelo (por exemplo, Django Admin em https://localhost/admin, um Django Públic Admin em http://localhost/painel e outro em http://localhost/painel-alternativo )

Adicional

Mentoria

Eu, Cuducos, sou o criador desse projeto e me ofereço para mentoria a quem quiser colaborar para o projeto. Sou co-fundador da da Operação Serenata de Amor, apaixonado por comunidades acolhedoras de código-aberto, doutor em sociologia, e trabalho com tecnologia há mais de 15 anos, e com Python há mais de 7 anos — principalmente na área de tecnologia cívica, tendo colaborado com Open Knowledge Brasil, Banco Mundial, IBCCRIM, Radar Legislativo entre outros.

Contate-me

cuducos#5506 no Discord e @cuducos em quase todas as outras coisas: GitHub, Telegram, Twitter, por exemplo.

Flask-AlchemyDumps

Flask-AlchemyDumps é um extensão que possibilita o backup de base de dados de aplicações em Flask com o serializer nativo do SQLAlchemy. É uma ferramenta simples para cópias de segurança igualmente simples, mantendo o CLI do Flask como ponto principal de interface com a aplicação.

Repositório

https://github.com/cuducos/alchemydumps

O que eu ganho participando desse projeto?

Tecnicamente falando, contribuir para esse projeto é uma experiência excelente para conhecer as entranhas de um ORM (object-relational mapping, uma abstração que faz a gente poder lidar com vários tipos de banco de dados sem se preocupar com as diferenças entre eles) e os detalhes no processo de importação e exportação de dados.

Por fim, esse é um repositório pequeno e há espaço para colaboração futura ou mesmo assumir a manutenção do pacote de forma mais definitiva!

Quais tecnologias e ferramentas devem ser utilizadas?

  • Python
  • Dependências super utilizados no mercado, como Flask e SQLAlchemy
  • SQL
  • Git e GitHub para colaboração com o código fonte
  • Potencial para explorar Sphinx na documentação

Links úteis

Qual perfil de aprendiz se espera?

O perfil ideal é uma pessoa interessada em lidar com Python e base de dados, escrevendo códigos super legíveis e expressíveis. E pessoas que gostem de refatoração!

Cronograma sugerido

1ª fase de desenvolvimento

  • Passeio guiado no código-fonte do pacote
  • Arrumar a CI que está falhando no momento
  • Arrumar um bug cuja solução já foi rascunhada, mas não testada e implementada ainda

2ª fase de desenvolvimento

  • Pesquisar soluções para uma melhoria que não dependa de código SQL hardcoded
    • Alternativamente, pesquisar compatibilidade desses códigos SQL com bancos de dados suportados pelo SQLAlchemy
  • Implementar a melhor solução encontrada

3ª fase de desenvolvimento

Adicional

  • Implementar solução que salve os dados em outros formatos
  • Implementar soleção que salve os dados em outras formas de armazenamento como AWS S3, DigitalOcean Spaces, Azure Bucket etc.
  • Refatoração de código geral (essa biblioteca tem mais de 5 anos de idade, e quando eu a escrevi, eu era um iniciante — logo tem muito espaço para melhoria)

Mentoria

Eu, Cuducos, sou o criador desse projeto e me ofereço para mentoria a quem quiser colaborar para o projeto. Sou co-fundador da da Operação Serenata de Amor, apaixonado por comunidades acolhedoras de código-aberto, doutor em sociologia, e trabalho com tecnologia há mais de 15 anos, e com Python há mais de 7 anos — principalmente na área de tecnologia cívica, tendo colaborado com Open Knowledge Brasil, Banco Mundial, IBCCRIM, Radar Legislativo entre outros.

Contate-me

cuducos#5506 no Discord e @cuducos em quase todas as outras coisas: GitHub, Telegram, Twitter, por exemplo.

Flask-SimpleLogin

Flask-SimpleLogin é a forma mais fácil de adicionar a funcionalidade de login em uma aplicação Flask. Foi criada pelo Bruno Rocha e hoje é mantida pelo Eduardo Cuducos em uma organização que junta diversas extensões para Flask criadas pelo Bruno.

Repositório

https://github.com/flask-extensions/flask_simplelogin

O que eu ganho participando desse projeto?

Tecnicamente falando, contribuir para esse projeto é uma experiência excelente para o Flask, arquiteturas de projeto em Flask e como funcionam extensões para o Flask. Por fim, esse é um repositório pequeno e há espaço para colaboração futura.

Quais tecnologias e ferramentas devem ser utilizadas?

  • Python e Flask
  • HTML e CSS para detalhes de front-end
  • Git e GitHub para colaboração com o código fonte
  • Potencial para explorar Sphinx na documentação

Links úteis

Qual perfil de aprendiz se espera?

O perfil ideal é uma pessoa interessada em lidar com Python e Flask, simples assim.

Você reparou que eu disse pessoa interessada e não pessoa que já sabe tudo, né? Ufa, que bom. Só para confirmar 💜

Cronograma sugerido

1ª fase de desenvolvimento

2ª fase de desenvolvimento

3ª fase de desenvolvimento

  • Melhorias no visual
  • Organização e melhoria da documentação

Adicional

  • Implementar novas formas de autenticação (como, por exemplo, permitir apenas clientes no mesmo domínio do servidor)

Mentoria

Eu, Cuducos, sou o criador desse projeto e me ofereço para mentoria a quem quiser colaborar para o projeto. Sou co-fundador da da Operação Serenata de Amor, apaixonado por comunidades acolhedoras de código-aberto, doutor em sociologia, e trabalho com tecnologia há mais de 15 anos, e com Python há mais de 7 anos — principalmente na área de tecnologia cívica, tendo colaborado com Open Knowledge Brasil, Banco Mundial, IBCCRIM, Radar Legislativo entre outros.

Contate-me

cuducos#5506 no Discord e @cuducos em quase todas as outras coisas: GitHub, Telegram, Twitter, por exemplo.

GetGist

GetGist é um programa de linha de comando para que a gente baixe, salve e edit Gists do GitHub como se fossem arquivos locais. A abstração que esse programa faz é uma espécie de adaptador entre a lógica de sistema de arquivos e a lógica de repositórios Git.

Repositório

https://github.com/cuducos/getgist

O que eu ganho participando desse projeto?

Tecnicamente falando, contribuir para esse projeto é uma experiência excelente para quem curte desenvolver programas de linha de comando, e aplicações que interagem com outros serviços web (no caso, a API web do GitHub).

Por fim, esse é um repositório pequeno e há espaço para colaboração futura ou mesmo assumir a manutenção do pacote de forma mais definitiva!

Quais tecnologias e ferramentas devem ser utilizadas?

  • Python
  • Dependências com API super amigáveis como Click e Requests
  • Git e GitHub para colaboração com o código fonte
  • Potencial para explorar Sphinx na documentação
  • Potencial para explorar Go ou Rust

Links úteis

Qual perfil de aprendiz se espera?

O perfil ideal é uma pessoa interessada em lidar com Python escrevendo códigos super legíveis e expressíveis. E pessoas que gostem de refatoração!

Cronograma sugerido

1ª fase de desenvolvimento

  • Passeio guiado no código-fonte do pacote
  • Discussão sobre melhorias possíveis no código (a maior parte do código é de 2016, ou antes, então tem muita coisa para melhorar)
  • Implementação de testes em partes específicas

2ª fase de desenvolvimento

  • Implementação da funcionalidade list
  • Melhorias no código para evitar repetição
  • Melhorias na documentação (melhor organização e conteúdos novos)

3ª fase de desenvolvimento

  • Implementação de verificação de tipos para maior segurança
  • Migrar do Click para o Typer

Adicional

  • Estudar como fazer instalação via apt, brew e outros gerenciadores de pacotes
  • Migrar para alguma linguagem de programação que ofereça melhor desempenho, como Go ou Rust, por exemplo — nesse caso, podemos assumir só essa tarefa e distribuí-la ao longo do processo!

Mentoria

Eu, Cuducos, sou o criador desse projeto e me ofereço para mentoria a quem quiser colaborar para o projeto. Sou co-fundador da da Operação Serenata de Amor, apaixonado por comunidades acolhedoras de código-aberto, doutor em sociologia, e trabalho com tecnologia há mais de 15 anos, e com Python há mais de 7 anos — principalmente na área de tecnologia cívica, tendo colaborado com Open Knowledge Brasil, Banco Mundial, IBCCRIM, Radar Legislativo entre outros.

Contate-me

cuducos#5506 no Discord e @cuducos em quase todas as outras coisas: GitHub, Telegram, Twitter, por exemplo.

Minha Receita

A Minha Receita é uma solução para que pequenas organizações tenham sua própria API web para consulta de informações sobre CNPJ. É uma API construída com base nos dados disponibilizados pela Receita Federal e tratados pelo Brasil.IO.

Repositório

https://github.com/cuducos/minha-receita

O que eu ganho participando desse projeto?

Tecnicamente falando, contribuir para esse projeto é uma experiência excelente em estratégias para lidar com volume de dados (com poucos recursos), integração de sistemas, performance e disponibilidade. O desafio é fazer uma infraesturtura barata, ou ao menos mais barata do que pagar pelo acesso a uma API semelhante no SERPRO.

Do ponto de vista cívico, esse projeto ajuda iniciativas que precisam saber detalhes sobre pessoas jurídicas para fazer análises de dados — como por exemplo, saber se um gasto público com refeição foi feito em um estabelecimento que oferece esse tipo de produto e serviço.

Por fim, esse é um repositório pequeno e há espaço para colaboração futura ou mesmo assumir a manutenção do pacote de forma mais definitiva!

Quais tecnologias e ferramentas devem ser utilizadas?

  • Docker e Docker Compose
  • Python
  • Dependências com API super amigáveis como a Rows
  • Linguagens de programação e frameworks para APIs web de alta disponibilidade
    • atualmente utiliza-se bibliotecas em Python com asyncio como aiopg e Sanic
    • mas podemos experimentar outros frameworks em Python (como, por exemplo, FastAPI) ou mesmo outras linguagens como Go ou Elixir, por exemplo
  • Git e GitHub para colaboração com o código fonte
  • Espaço em disco (só o banco de dados tem mais de 30Gb)

Links úteis

Qual perfil de aprendiz se espera?

O perfil ideal é uma pessoa interessada em lidar com dados e performance, e também com integração entre diversos sistemas.

Você reparou que eu disse pessoa interessada e não pessoa que já sabe tudo, né? Ufa, que bom. Só para confirmar 💜

Cronograma sugerido

1ª fase de desenvolvimento

  • Passeio guiado no código-fonte do pacote
  • Teste e atualização do projeto para funcionar com o banco de dados mais recente

2ª fase de desenvolvimento

  • Desenvolvimento de técnicas de benchamrk para medir a disponibilidade da API web

3ª fase de desenvolvimento

  • Desenvolvimento ou refatoração da API web para maior disponibilidade
    • Talvez com outro framework, como o FastAPI ou Django 3.1 (que tem views assíncronas)
    • Talvez com outra linguagem, como Go ou Elixir
    • De acordo com alguns benchmarks, as melhores opções em termos de desempenho seriam:

Adicional

  • Refatoração do carregamento dos dados (caso a API web seja em outra linguagem, podemos fazer tudo nessa outra linguagem)
  • Simplificação do carregamento dos dados
  • Desenvolvimento de plataforma para colocar em produção, com exemplos em Kubernetes, por exemplo

Mentoria

Eu, Cuducos, sou o criador desse projeto e me ofereço para mentoria a quem quiser colaborar para o projeto. Sou co-fundador da da Operação Serenata de Amor, apaixonado por comunidades acolhedoras de código-aberto, doutor em sociologia, e trabalho com tecnologia há mais de 15 anos, e com Python há mais de 7 anos — principalmente na área de tecnologia cívica, tendo colaborado com Open Knowledge Brasil, Banco Mundial, IBCCRIM, Radar Legislativo entre outros.

Contate-me

cuducos#5506 no Discord e @cuducos em quase todas as outras coisas: GitHub, Telegram, Twitter, por exemplo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment