Minha Experiência Contribuindo para o Open Source - Emptor
Contribuir para o open source é uma maneira divertida de aprender e melhorar suas habilidades de codificação - e você pode fazer isso ajudando os outros. As comunidades de open source geralmente estão abertas a novos participantes em um ambiente de aprendizagem; isso torna a experiência de contribuir alegre.
Uma boa maneira de decidir onde contribuir é escolher o software de código aberto que você usa diariamente. Nesse sentido, se você conhece o software ao qual você está prestes a contribuir, pode facilmente identificar onde a ajuda é necessária e onde você pode adicionar novos e interessantes recursos.
Neste artigo, detalharei as contribuições que fiz e demonstrarei mais ou menos o fluxo de trabalho de contribuir para o Open Source. Os projetos nos quais me concentrarei são os seguintes:
- scrapy: Estrutura de web crawling e scraping em Python.
- jrnl: Aplicativo de diário de texto para a linha de comando.
- polybar: Uma ferramenta rápida e fácil de usar para criar uma barra de status.
Scrapy | Adicionar uma Nova Extensão para Verificar Nomes de Configurações
O Scrapy é uma ferramenta muito personalizável; uma das principais formas de personalizá-lo é por meio de configurações. As configurações do Scrapy permitem que você personalize o comportamento de todos os componentes do Scrapy, incluindo o núcleo, extensões, pipelines e spiders.
Então, por exemplo, se DNSCACHE_ENABLED
estiver definido como True
, nosso spider ativará o cache de DNS na memória. O Scrapy tem MUITAS variáveis configuráveis que estão sujeitas a erros de digitação que não forneceram feedback suficiente para que os novos usuários descobrissem esse erro trivial.
Esta contribuição tenta resolver esse problema criando uma nova extensão. Inicialmente, um linter foi proposto para o problema, mas após algumas discussões, o consenso foi que uma abordagem de tempo de execução seria melhor. A extensão encontra configurações não utilizadas lendo um atributo (has_been_read
) no dicionário de configurações e, se possível, sugerirá um possível substituto. Outra vantagem dessa abordagem de tempo de execução é que também encontrará configurações não utilizadas que possivelmente não são configurações com erros de digitação.
PR: Adicionar uma nova extensão para verificar nomes de configurações
Scrapy | Adicionar Contagem de Falhas e Sucesso às Backends de Feedstorage
O Scrapy permite que os usuários especifiquem como exportar os dados extraídos (por exemplo, .xml
, .json
, .csv
, etc.) e também onde salvá-los (o sistema de arquivos local, S3, Google Cloud, um servidor FTP, saída padrão). No entanto, esses backends de armazenamento não salvavam informações de desempenho no final da execução. Um bom lugar para salvar essas informações são as estatísticas que o Scrapy gera durante a execução. Essas estatísticas podem ser usadas para medir o desempenho da execução, pois contêm estatísticas sobre uso de memória, carimbo de data/hora de conclusão, carimbo de data/hora de início, etc.
A ideia deste PR é adicionar uma nova estatística que ajudará os usuários a saber se o backend de armazenamento encontrou alguns problemas durante o salvamento. Por exemplo, se um spider salva no S3 e no sistema de arquivos local, mas as credenciais do S3 estavam erradas, essa estatística será apresentada ao usuário:
{
"elapsed_time_seconds": 11.61577,
"feedexport/failed_count/S3FeedStorage": 2,
"feedexport/success_count/FileFeedStorage": 2,
"finish_reason": "finished"
}
PR: Adicionar estatísticas de contagem de falhas e sucesso aos backends de feedstorage
jrnl | Adicionar Opção de Formato de Exibição Padrão ao Arquivo de Configuração
O jrnl suporta uma ampla variedade de formatos (Markdown, JSON, YAML, etc.); no entanto, a usabilidade desse recurso não era a melhor. Isso porque se você quiser (por exemplo) imprimir as últimas oito entradas no formato Markdown, você pode usar este comando:
jrnl -8 --export md
Isso poderia ser tedioso para os usuários que querem imprimir como Markdown toda vez, pois eles devem adicionar continuamente a opção --export md
. Para evitar esse incômodo, esta contribuição adiciona uma nova opção ao arquivo de configuração: display_format
, que é uma opção que pode ser definida como qualquer um dos exportadores que o jrnl possui.
PR: Adicionar opção de formato de exibição padrão ao arquivo de configuração
Polybar | Remover Limite Superior para get_volume
O Polybar tem um recurso para mostrar o volume real de um sistema. O problema é que ele não “reconhece” quando o volume ultrapassa 100%. Essa é uma possibilidade que sistemas de som como o PulseAudio lhe dão, permitindo que você incremente o volume além de 100% para 150%.
Este recurso menor requer apenas evitar limitar o volume entre [0, 100]
. Talvez a parte “mais difícil” tenha sido compilar o código e testar as alterações.
PR: Remover limite superior para get_volume
Conclusão
O conhecimento obtido a partir de discussões com mantenedores, envolvendo-se mais com projetos que me interessavam e as comunidades acolhedoras são algumas das principais razões pelas quais buscarei contribuir para o open source no futuro.
Quais são seus pensamentos sobre o open source?