Pycharm – CODE WITH ME – Pair Programming e codificação colaborativa no mesmo código

Pythonistas gostam de utilizar a IDE PyCharm Community para codar devido as facilidades que ele oferece, mas você sabia que é possível fazer uma sessão colaborativa e codar no mesmo projeto ou até no mesmo código?

Pois bem, a Jetbrains disponibiliza para a comunidade de Python esse serviço gratuitamente, mas também pode ser pago e nesse caso, não existe limitação.

Para a versão gratuita do CODE WITH ME, até 3 programadores podem se conectar simultaneamente durante 30 minutos, com recursos de ligação por voz.

As sessões são ilimitadas, porém elas são interrompidas depois de 30 minutos de utilização.

Ou seja, um recurso para Pair Programming mesmo!

A versão paga tem mais recursos como:

  • Tempo de sessão ilimitado
  • Até 50 desenvolvedores por sessão
  • Quantidade ilimitada de sessões
  • Suporte técnico via e-mail

O CODE WITH ME também pode ser utilizado para Coding DOJO para o treinamento e aprendizado de programação.

Acabou o tempo de ficar copiando código e perdendo tempo de verificar o DIFF entre as versões.
Com os versionadores GIT, bitbucket e outros, já houve uma redução significativa, mas ter o recurso dentro de um único ambiente ao invés de ficar realizando commits, forks, clones e etc, é bem melhor!

Como posso utilizar o CODE WITH ME?

Dentro do Pycharm, pressione Ctrl + Alt + S simultaneamente e abrirá a tela de Settings.

Escolha Plugins, digite “code with me” e clique no botão “Install”, conforme a tela abaixo. Por fim, clique em OK após a instalação.
Na tela abaixo, está com outro exemplo de plugin, no caso Code4Me, porque o CODE WITH ME já estava instalado na minha máquina, mas o procedimento é o mesmo.

Convide seu amigo programador para codar juntamente contigo!

Até a próxima!

Altair Ribeiro

Tratar erros em Python para facilitar a vida

Você já se deparou com um erro no código e ficou batendo cabeça para saber qual era o erro?
A IDE ou o próprio prompt (>>>) do Python informava uma coisa e depois você descobriu que era outro erro.

Pois é!

Por causa disso, achamos interessante trazer uma estrutura básica para quem está começando a programar em Python.

A estrutura é bem simples e consiste em ter um “try:” antes do seu código fonte e o tratamento após o seu código fonte.

As bibliotecas que serão carregadas devem ficar antes do “try:”.

O desvio para identificação do erro será para erros de sistemas operacionais, erros de valor porque o Python trabalha orientado a objetos e quase tudo é um objeto no python e, por fim, exceções que acontecerem com comportamentos não esperados na execução do programa.

Esse tratamento pode ser melhorado, mas com esse mínimo será possível facilitar muito a vida de quem está programando.

Um ponto de atenção é na indentação, porque como o “try:” fica na primeira coluna, então o seu código fonte deve começar indentado. Eu acho que esse é o único ponto um “pouco chato” de utilizar o tratamento de erro, porque você vai iniciar seu código com a indentação no primeiro nível de indentação, por outro lado, compensa o benefício da rápida identificação do erro.

Vamos ao código!


# Carregue as biblotecas aqui, como pandas, matplotlib, numpy, etc


# Arquivo de exemplo de tratamento de erros
try:

    # <aqui vai o código fonte do seu programa>

except OSError as err:
    #<aqui o tratamento captura o erro de Sistema Operacional>
    print("Erro de S.O. : {0}".format(err))
except ValueError:
    # <aqui  o tratamento captura o erro do programa como valores errados ou parâmetros>
    print("Não pode converter data para inteiro.")
except BaseException as err:
    #<aqui  o tratamento captura as exceções que acontecem no programa>
    print(f"Inesperado {err=}, {type(err)=}")
    raise

Teste esse tratamento de erro!
Copie esse código fonte de tratamento de erro e cole o seu código após o “try:”.

Depois, force erros como mudar caminho de arquivos, “\”, parâmetros, cálculos errados e etc.

A mágica acontecerá e sua vida ficará mais fácil a partir do momento que você iniciar o tratamento de erros.

Com o tempo, esse processo é incorporado ao seu dia a dia.

Boa diversão!

Até a próxima!

Altair Ribeiro

Tocar mp3 com a biblioteca pygame

A biblioteca pygame é muito versátil na sua utilização, mas uma implementação simples é utilizá-la para tocar arquivos no formato mp3.

A implementação é muito simples e com poucas linhas, você pode utilizá-la para curtir um som ou inserir um arquivo de audio no seu sistema ou game.

Vamos ao código!


Uma forma de implementar o código.

# importar a biblioteca pygame
from pygame import mixer

# uma forma de implementar o código
mixer.init()

# substitua o nome do arquivo "musica.mp3" pelo seu arquivo mp3
mixer.music.load('musica.mp3')
mixer.music.play()
x = input('Digite algo para parar...')

Outra forma de implementar o código.

# importar a biblioteca pygame
import pygame

# outra forma de implementar o código

pygame.mixer.init()
# substitua o nome do arquivo "musica.mp3" pelo seu arquivo mp3
pygame.mixer.music.load('musica.mp3')
pygame.mixer.music.play()
x = input('Digite algo para parar a musica...')

As duas formas funcionam, porém fica a critério de cada um como implementar.

obs: código postado no grupo de Telegram da comunidade Py013.

Até a próxima!

Buscar CEPs com Python e Selenium

Um dos trabalhos apresentados no Encontro da Comunidade no dia 27/05/23 por Altair Ribeiro

Muitas vezes precisamos obter endereços completos para a realização de testes de software, ou ainda para incluir dados em um formulário na Web.
O Selenium é uma biblioteca muito utilizada para testes de software e que pode ser utilizada a realização desse tipo de trabalho repetitivo.

Você precisa ter o geckodriver.exe (baixe aqui) ou o chromedriver.exe (baixe aqui) para que o código fonte em Python em conjunto com a biblioteca Selenium crie uma instância do Browser e controle todo o processo de execução.

Tanto o Geckodriver.exe quanto o Chromedriver.exe precisam estar na mesma pasta do código fonte.

Utilizamos um site muito utilizado por Analistas de Qualidade para a geração de massa de dados.

É um site muito conhecido nesse meio e também muito bem montado e que contribui muito para elevarmos o nível da disciplina de qualidade no Brazil.

É o site www.4devs.com.br!

Vamos ao código fonte.

# importar as bibliotecas necessárias
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import random
import re

# Definir a quantidade de endereços que serão gravados no arquivo "ceps.txt"
qtde= 5

# Inclusão de um Try para obter o código de erro em caso de falha do código fonte e o código que será executado
try:
    path_atual = os.getcwd()
    print('path:' , path_atual)

    # driver = webdriver.Chrome()
    driver = webdriver.Firefox()
    driver.maximize_window()

    # URL que será acessada
    url = 'https://www.4devs.com.br/gerador_de_cep'

    driver.get(url)
    time.sleep(2)

    cont = 0

    estado = driver.find_element(By.ID, 'cep_estado')
    estado.send_keys('SP')
    time.sleep(5)

    estado = driver.find_element(By.ID, 'cep_cidade')
    estado.send_keys('Santos')
    time.sleep(5)

    with open("ceps.txt",'a', newline="") as arquivo:
        while cont <qtde:

            submit = driver.find_element(By.ID,'btn_gerar_cep')
            #time.sleep(3)
            submit.click()
            time.sleep(5)
            cep = driver.find_element(By.ID, 'cep')
            cep.click()
            endereco = driver.find_element(By.ID, 'endereco')
            endereco.click()
            bairro = driver.find_element(By.ID, 'bairro')
            bairro.click()
            cidade = driver.find_element(By.ID, 'cidade')
            cidade.click()
            estado = driver.find_element(By.ID, 'estado')
            estado.click()
            time.sleep(5)
            arquivo.write(re.sub("\-","",cep.text) + ';' + endereco.text + ';' + str(random.randint(1,1000)) + ';' + 'ap. ' + str(random.randint(1,100)) + ';' + bairro.text + ';' + cidade.text + ';' +estado.text + '\n')
            cont += 1
            #print(cont , ". ", cep.text + ';' + endereco.text + ';' + str(random.randint(1,1000)) + ';' +  'ap. ' + str(random.randint(1,100)) + ';' + bairro.text + ';' + cidade.text + ';' +estado.text)
            print(cont , ". ", re.sub("\-","",cep.text) + ';' + endereco.text + ';' + str(random.randint(1,1000)) + ';' +  'ap. ' + str(random.randint(1,100)) + ';' + bairro.text + ';' + cidade.text + ';' +estado.text)

    arquivo.close()
    driver.close()

# Tratamentos dos erros para uma melhor identificação em caso de falha
except OSError as err:
    #<aqui vai o erro de Sistema Operacional>
    print("Erro de S.O. : {0}".format(err))
except ValueError:
    # <aqui vai o erro do programa>
    print("Não pode converter data para inteiro.")
except BaseException as err:
    #<aqui vão exceções que aconteçam no programa>
    print(f"Inesperado {err=}, {type(err)=}")
    raise

Se tiver dúvidas no uso do código, entre na comunidade no Telegram (https://t.me/+aLIZYCmBJfH-qPGs).

Até a próxima!

Encontro da comunidade Py013 – Parque Tecnológico de Santos

No dia 27/05/2023, a comunidade realizou mais um encontro com apresentação de trabalhos pelos membros da comunidade.

O evento contou com a apresentação de trabalhos de Altair Ribeiro, Lucas Ribeiro e José Fontebasso Neto, além da interação entre os membros da comunidade.

Como sempre tivemos muita troca de experiência e muitas discussões elucidativas sobre o uso de bibliotecas, comandos e funções.

Algumas das fotos do encontro.

Baixar a playlist inteira do Youtube

Algumas vezes queremos estudar offline e para isso precisamos baixar os videos localmente no computador.

Existem ferramentas que fazem isso, mas geralmente são pagas.

Com poucas linhas de código fonte, você pode fazer isso com Python.

Porém, respeitem os direitos autorais dos autores dos vídeos, músicas ou qualquer forma de conteúdo produzido.

Vamos lá!

# carregar os métodos Youtube e Playlist da biblioteca pytube
from pytube import YouTube, Playlist

# atribui à variável playlist_fim a URL da playlist obtida no Youtube
playlist_fim = 'https://www.youtube.com/watch?v=IftUFXo2e-k&list=PLnNURxKyyLIKvXocwRwLCQqPU0mcTSLxJ'

# atribuir à variável playlist a lista de vídeos da playlist com o método Playlist
playlist = Playlist(playlist_fim)

# para cada item da lista de vídeos da playlist, baixar cada
# vídeo sequencialmente (laço for utilizado)
for url in playlist:
    # atribuir à variável video o método Youtube com o parãmetro url que irá
    # ler o vídeo sequencialmente, iniciando do primeiro da playlist
    video = YouTube(url)
    # atribuir à variável stream a utilização do vídeo de mais alta resolução
    stream = video.streams.get_highest_resolution()
    # efetuar o download do vídeo e gravar na pasta "playlist"
    stream.download(output_path='playlist')

A variável PLAYLIST_URL terá a atribuição da URL que foi obtida do Youtube.

O código fonte está comentado para facilitar o entendimento.

Até mais!

Baixar video do Youtube com 2 linhas de código

Muitas vezes queremos baixar um vídeo no Youtube para ver posteriormente, mas os sites que existem para isso contém malwares que podem ser instalados no seu computador.

Por isso, algumas vezes é melhor você mesmo fazer o download com poucas linhas de código em Python.

Somente fique atento aos direitos autorais de músicas, filmes e artistas em geral, porque existem leis que protegem os direitos autorais do autor da obra e utilizar a obra sem autorização é crime.

Esse snippet é somente ilustrativo para você exercitar a sua programação e conhecer mais uma biblioteca neste vasto mundo do Python.

A biblioteca que utilizaremos é a pytube.

A Pytube é um biblioteca que se define como “leve e livre de dependências para baixar vídeos do Youtube”.

Simples assim!

Vamos ao snippet!

from pytube import YouTube

YouTube("https://www.youtube.com/watch? \
v=a72yIwfvZXg").streams.get_highest_resolution().download()

O caracter “\” no final da segunda linha é somente para a quebra de linha explícita e facilitar o copy e paste do código. Na verdade, é uma única string com os parâmetros e métodos.

Se o vídeo no Youtube tiver restrição de idade (“age_restricted”) ele dará um erro, nesse caso, é bom dar uma verificada na documentação da biblioteca para contornar essa restrição. Podemos tratar essa situação em outro post.

O vídeo será baixado na mesma pasta que o código Python está sendo executado.

Não esqueça de instalar antes a biblioteca com o comando abaixo na linha de comando (cmd):

c:> pip install pytube

Nesse exemplo, utilizamos o vídeo do canal Dev Aprender do Jhonatan de Souza, que possui vídeos excelentes sobre Python e sua utilização.

Conheça mais sobre a biblioteca pytube e explore novas opções de download!

Até mais!

Baixar audio de um video no Youtube

Muitas vezes queremos baixar somente o som de um vídeo no Youtube, mas os sites que existem para isso contém muitas armadilhas que podem instalar malwares no seu computador, enquanto realizam o download para você.

Por isso, algumas vezes é melhor você mesmo fazer o download com poucas linhas de código em Python.

Somente fique atento aos direitos autorais de músicas, filmes e artistas em geral, porque existem leis que protegem os direitos autorais do autor da obra e utilizar a obra sem autorização é crime.

Esse snippet é somente ilustrativo para você exercitar a sua programação e conhecer mais uma biblioteca neste vasto mundo do Python.

A biblioteca que utilizaremos é a pytube.

A Pytube é um biblioteca que se define como “leve e livre de dependências para baixar vídeos do Youtube”.

Simples assim!

Vamos ao snippet!

from pytube import YouTube

VIDEO_URL = 'https://www.youtube.com/watch?v=FBLAV1SbJFk&t=2s'
yt = YouTube(VIDEO_URL)

audio = yt.streams.filter(only_audio=True)[0]
audio.download()

Na variável VIDEO_URL você incluirá a URL do vídeo do Youtube que será realizado o download.

Não esqueça de instalar antes a biblioteca com o comando abaixo na linha de comando (cmd):

c:> pip install pytube

Nesse exemplo, utilizamos o vídeo do canal Dev Aprender do Jhonatan de Souza, que possui vídeos excelentes sobre Python e sua utilização.

Conheça mais sobre a biblioteca pytube e explore novas opções de download!

Até mais!

Open Data Day 2023 – Py013 (04/03/2023)

Novamente a comunidade Py013 organiza em Santos, um dia em comemoração a transparência dos Dados Abertos. Um dia internacional organizado pela Open Knowledge Foundation onde 179 eventos foram realizado em todo o mundo, entre os dias 4 a 10 de março, para falar, discutir e realizar descobertas sobre dados abertos.

Evento registrado no Mapa Oficial do Open Data Day

Através dos grupos do Whatsapp e Telegram da comunidade py013 foi realizada uma votação para saber qual o tema seria tratado no Open Data Day do ano de 2023. A comunidade escolheu entre 3 temas: Meio Ambiente, Eleições 2020/2022 e Casos de Dengue na Baixada Santista.

O tema mais votado foi Eleições 2020/2022, e foram usados data sets do TSE como base para análises exploratórias. O evento foi sediado nas dependências da Fundação Parque Tecnológico de Santos, com o apoio da Universidade Católica de Santos e Editora Novatec.

Foto do Diretor do Parque Tecnológico de Santos apresentando o Local.
Foto de Gabriel Miceli, Diretor do Parque Tecnológico de Santos apresentando o Local.

O Diretor do Parque Tecnológico de Santos, Gabriel Miceli, fez uma breve apresentação do Parque Tecnológico de Santos, e em seguida João e Altair realizaram uma breve introdução sobre uma primeira análise a respeito dos Data Sets dos resultados das Eleições 2020. Após isso, os participantes agruparam-se em busca de uma análise exploratória inicial.

Altair dando início ao evento.
Altair dando início ao evento.
João apresentando a Comunidade Py013 e dando início a um exemplo de análise exploratória.
João apresentando a Comunidade Py013 e dando início a um exemplo de análise exploratória.

Após aproximadamente 3 horas de análise exploratória utilizando a biblioteca Pandas, começaram a ser apresentadas as primeiras descobertas.

Gabriel descobriu que aproximadamente apenas 33% das sessões eleitorais possuem recursos de acessibilidade em todo o Brasil.

O grupo do Daniel apresentou sua análise descobrindo nas eleições de 2022 para governador do Estado de São Paulo quais os candidatos que possuíam menos votos que o total de Brancos e Nulos.

Grupo do Ergon realizou um levantamento sobre o total de eleitores na região da Baixada Santista, e descobriu que Praia Grande possui quase a mesma quantidade de eleitores que São Vicente.

João realizou uma análise parecida com a do grupo anterior, com o objetivo de localizar no município de Santos quais as escolas que possuem a maior quantidade de eleitores, e plotou num mapa da cidade de Santos e as 6 maiores escolas eleitorais.

Por fim, Neto apresentou seu código em Python que realizou uma raspagem de dados nos logs das Urnas Eletrônicos para montar um Data Set com o objetivo de analisar as versões das urnas eletrônicas e sua localização geográfica nas eleições de 2022. Conseguiu montar o Data Set do estado do Acre, tentou realizar para o estado de São Paulo mas a quantidade de Urnas é 10 vezes maior, consequentemente a quantidade de logs também, e demandaria muito tempo de processamento. Porém, foi possível realizar uma prova de conceito que é possível realizar essa análise.

Ao final do evento foram realizados sorteio de livros, e a divulgação de voucher de descontos da Novatec.

Livros sobre Empreendedorismo foram sorteados
Livro sobre Web Scrapying com Python foi sorteado
Voucher de desconto da Novatec

Foi um dos melhores Open Data Day realizados pela Py013, aparecemos também em um post no Instagram da Open Knowledge Brasil.

Abaixo segue alguns links do Google Colab das análises realizadas:

Google Colab do Gabriel
Google Colab do Daniel

Agradecemos novamente o apoio do Parque Tecnológico de Santos, Universidade Católica de Santos e Editora Novatec. Esperamos todos novamente para o próximo Open Data Day em 2024, enquanto isso aguardem novidades, capaz de realizarmos mais um evento sobre Ciência de Dados dando continuidade ao Open Data Day deste ano!

Em breve mais novidades! Viva a Transparência dos Dados Abertos!