E como os itens são salvos no Firebase?
Resposta: Recentemente o Firebase lançou uma API para acessar a SDK usando Python, então eu escrevi um item pipeline chamado scrapy-firebase (https://github.com/skhaz/scrapy-firebase) que usa essa API para escrever no banco de dados do Firebase, a cada item coletado do Scrapy, o método process_item (https://github.com/skhaz/scrapy-firebase/blob/master/scrapy_firebase.py#L35) do pipeline é incado, nesse método eu salvo no Firebase.
class FirebasePipeline(BaseItemExporter):
def load_spider(self, spider):
self.crawler = spider.crawler
self.settings = spider.settings
def open_spider(self, spider):
self.load_spider(spider)
configuration = {
'credential': credentials.Certificate(filename),
'options': {'databaseURL': self.settings['FIREBASE_DATABASE']}
}
firebase_admin.initialize_app(**configuration)
self.ref = db.reference(self.settings['FIREBASE_REF'])
def process_item(self, item, spider):
item = dict(self._get_serialized_fields(item))
child = self.ref.child('/'.join([item[key] for key in self.keys]))
child.set(item)
return item
Próximos passos
Ao mesmo tempo em que eu notifico o canal (https://t.me/RegisBittencourt) do Telegram, estou usando o Cloud Natural Language API (https://cloud.google.com/natural-language/) para classificar a notícia, e, em seguida, salvo no BigQuery (https://bigquery.cloud.google.com/). Após algum tempo, acredito que será possível usar o BigQuery para determinar quais trechos, quando e o quê costuma dar mais problemas à rodovia, através de data mining!
Resposta: Recentemente o Firebase lançou uma API para acessar a SDK usando Python, então eu escrevi um item pipeline chamado scrapy-firebase (https://github.com/skhaz/scrapy-firebase) que usa essa API para escrever no banco de dados do Firebase, a cada item coletado do Scrapy, o método process_item (https://github.com/skhaz/scrapy-firebase/blob/master/scrapy_firebase.py#L35) do pipeline é incado, nesse método eu salvo no Firebase.
class FirebasePipeline(BaseItemExporter):
def load_spider(self, spider):
self.crawler = spider.crawler
self.settings = spider.settings
def open_spider(self, spider):
self.load_spider(spider)
configuration = {
'credential': credentials.Certificate(filename),
'options': {'databaseURL': self.settings['FIREBASE_DATABASE']}
}
firebase_admin.initialize_app(**configuration)
self.ref = db.reference(self.settings['FIREBASE_REF'])
def process_item(self, item, spider):
item = dict(self._get_serialized_fields(item))
child = self.ref.child('/'.join([item[key] for key in self.keys]))
child.set(item)
return item
Próximos passos
Ao mesmo tempo em que eu notifico o canal (https://t.me/RegisBittencourt) do Telegram, estou usando o Cloud Natural Language API (https://cloud.google.com/natural-language/) para classificar a notícia, e, em seguida, salvo no BigQuery (https://bigquery.cloud.google.com/). Após algum tempo, acredito que será possível usar o BigQuery para determinar quais trechos, quando e o quê costuma dar mais problemas à rodovia, através de data mining!
👍1
Forwarded from Fernando @ffreitasalves
Oi pessoal, estamos com vagas para Python e Django, presencial aqui em SP na Tikal Tech.
Quem estive interessado, é só se candidatar por esse formulário, mais informações neste link também:
https://tikaltech.typeform.com/to/TcZu1Z
Quem estive interessado, é só se candidatar por esse formulário, mais informações neste link também:
https://tikaltech.typeform.com/to/TcZu1Z
👍1
Forwarded from Letícia Portella
Pessoal, fiz um projetinho com guidelines pra quem quer estudar ciencia de dados
https://github.com/leportella/data-science-roadmap
E pra colocar as empresas no brasil que trabalham e buscam cientista de dados
https://github.com/leportella/data-science-roadmap/blob/master/empresas.md
Por favor, contribuam :)
https://github.com/leportella/data-science-roadmap
E pra colocar as empresas no brasil que trabalham e buscam cientista de dados
https://github.com/leportella/data-science-roadmap/blob/master/empresas.md
Por favor, contribuam :)
GitHub
leportella/data-science-roadmap
Contribute to leportella/data-science-roadmap development by creating an account on GitHub.
Novamente a PacktPub está com a seção "Forever Free eBooks". Lá você vai encontrar diversos títulos de graça para sua coleção, dentro das categorias:
- Web Development
- Big Data
- Application Development
- Dev Tools
https://www.packtpub.com/packt/offers/free-learning
- Web Development
- Big Data
- Application Development
- Dev Tools
https://www.packtpub.com/packt/offers/free-learning
Peewee - Um ORM Python minimalista
http://pythonclub.com.br/peewee-um-orm-python-minimalista.html
Peewee (http://peewee.readthedocs.io/en/latest/index.html) é um ORM destinado a criar e gerenciar tabelas de banco de dados relacionais através de objetos Python. Segundo a wikipedia (https://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional), um ORM é:
Mapeamento objeto-relacional (ou ORM, do inglês: Object-relational mapping) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.
O que o ORM faz é, basicamente, transformar classes Python em tabelas no banco de dados, além de permitir construir querys usando diretamente objetos Python ao invés de SQL.
O Peewee é destinado a projetos de pequeno/médio porte, se destacando pela simplicidade quando comparado a outros ORM mais conhecidos, como o SQLAlchemy. Uma analogia utilizada pelo autor da API e que acho muito interessante é que Peewee está para o SQLAlchemy assim como SQLite está para o PostgreSQL.
Em relação aos recursos por ele oferecidos, podemos citar que ele possui suporte nativo a SQLite, PostgreSQL e MySQL, embora seja necessário a instalação de drivers para utilizá-lo com PostgreSQL e MySQL e suporta tanto Python 2.6+ quanto Python 3.4+.
Neste tutorial, utilizaremos o SQLite, por sua simplicidade de uso e por não precisar de nenhuma configuração.
Instalação
O Peewee pode ser facilmente instalado com o gerenciador de pacotes pip:
pip install peewee
Criando o banco de dados
Para criar as tabelas é bem simples. Inicialmente passamos o nome do nosso banco de dados (a extensão *.db indica um arquivo do SQLite).
import peewee
db = peewee.SqliteDatabase('codigo_avulso.db')
Diferente de outros bancos de dados que funcionam através um servidor, o SQLite cria um arquivo de extensão *.db, onde todos os nossos dados são armazenados.
DICA: caso deseje ver as tabelas existentes no arquivo codigo_avulso.db, instale o aplicativo SQLiteBrowser. Com ele fica fácil monitorar as tabelas criadas e acompanhar o tutorial.
sudo apt-get install sqlitebrowser
A título de exemplo, vamos criar um banco destinado a armazenar nomes de livros e de seus respectivos autores. Comecemos primeiro com a classe que representa os autores.
import peewee
db = peewee.SqliteDatabase('codigo_avulso.db')
class Author(peewee.Model):
"""
Classe que representa a tabela Author
"""
# A tabela possui apenas o campo 'name', que
# receberá o nome do autor
name = peewee.CharField()
class Meta:
# Indica em qual banco de dados a tabela
# 'author' sera criada (obrigatorio). Neste caso,
# utilizamos o banco 'codigo_avulso.db' criado anteriormente.
database = db
Em seguida, criamos a classe que representa os livros. Ela possui uma relação de "muitos para um" com a tabela de autores, ou seja, cada livro possui apenas um autor, mas um autor pode possuir vários livros.
import peewee
db = peewee.SqliteDatabase('codigo_avulso.db')
class Book(peewee.Model):
"""
Classe que representa a tabela Book
"""
# A tabela possui apenas o campo 'title', que
# receberá o nome do livro
title = peewee.CharField()
# Chave estrangeira para a tabela Author
author = peewee.ForeignKeyField(Author)
class Meta:
# Indica em qual banco de dados a tabela
# 'author' sera criada (obrigatorio). Neste caso,
# utilizamos o banco 'codigo_avulso.db' criado anteriormente.
database = db
Agora, vamos reunir tudo em um único arquivo model.py. Como exemplo, eu criei um arquivo main.py para utilizarmos as classes que acabamos de criar.
import peewee
from model import Author, Book
if __name__ == '__main__':
try:
Author.create_table()
http://pythonclub.com.br/peewee-um-orm-python-minimalista.html
Peewee (http://peewee.readthedocs.io/en/latest/index.html) é um ORM destinado a criar e gerenciar tabelas de banco de dados relacionais através de objetos Python. Segundo a wikipedia (https://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional), um ORM é:
Mapeamento objeto-relacional (ou ORM, do inglês: Object-relational mapping) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.
O que o ORM faz é, basicamente, transformar classes Python em tabelas no banco de dados, além de permitir construir querys usando diretamente objetos Python ao invés de SQL.
O Peewee é destinado a projetos de pequeno/médio porte, se destacando pela simplicidade quando comparado a outros ORM mais conhecidos, como o SQLAlchemy. Uma analogia utilizada pelo autor da API e que acho muito interessante é que Peewee está para o SQLAlchemy assim como SQLite está para o PostgreSQL.
Em relação aos recursos por ele oferecidos, podemos citar que ele possui suporte nativo a SQLite, PostgreSQL e MySQL, embora seja necessário a instalação de drivers para utilizá-lo com PostgreSQL e MySQL e suporta tanto Python 2.6+ quanto Python 3.4+.
Neste tutorial, utilizaremos o SQLite, por sua simplicidade de uso e por não precisar de nenhuma configuração.
Instalação
O Peewee pode ser facilmente instalado com o gerenciador de pacotes pip:
pip install peewee
Criando o banco de dados
Para criar as tabelas é bem simples. Inicialmente passamos o nome do nosso banco de dados (a extensão *.db indica um arquivo do SQLite).
import peewee
db = peewee.SqliteDatabase('codigo_avulso.db')
Diferente de outros bancos de dados que funcionam através um servidor, o SQLite cria um arquivo de extensão *.db, onde todos os nossos dados são armazenados.
DICA: caso deseje ver as tabelas existentes no arquivo codigo_avulso.db, instale o aplicativo SQLiteBrowser. Com ele fica fácil monitorar as tabelas criadas e acompanhar o tutorial.
sudo apt-get install sqlitebrowser
A título de exemplo, vamos criar um banco destinado a armazenar nomes de livros e de seus respectivos autores. Comecemos primeiro com a classe que representa os autores.
import peewee
db = peewee.SqliteDatabase('codigo_avulso.db')
class Author(peewee.Model):
"""
Classe que representa a tabela Author
"""
# A tabela possui apenas o campo 'name', que
# receberá o nome do autor
name = peewee.CharField()
class Meta:
# Indica em qual banco de dados a tabela
# 'author' sera criada (obrigatorio). Neste caso,
# utilizamos o banco 'codigo_avulso.db' criado anteriormente.
database = db
Em seguida, criamos a classe que representa os livros. Ela possui uma relação de "muitos para um" com a tabela de autores, ou seja, cada livro possui apenas um autor, mas um autor pode possuir vários livros.
import peewee
db = peewee.SqliteDatabase('codigo_avulso.db')
class Book(peewee.Model):
"""
Classe que representa a tabela Book
"""
# A tabela possui apenas o campo 'title', que
# receberá o nome do livro
title = peewee.CharField()
# Chave estrangeira para a tabela Author
author = peewee.ForeignKeyField(Author)
class Meta:
# Indica em qual banco de dados a tabela
# 'author' sera criada (obrigatorio). Neste caso,
# utilizamos o banco 'codigo_avulso.db' criado anteriormente.
database = db
Agora, vamos reunir tudo em um único arquivo model.py. Como exemplo, eu criei um arquivo main.py para utilizarmos as classes que acabamos de criar.
import peewee
from model import Author, Book
if __name__ == '__main__':
try:
Author.create_table()
try:
Book.create_table()
except peewee.OperationalError:
print 'Tabela Book ja existe!'
Após executarmos o código, será criado um arquivo de nome codigo_avulso.db no mesmo diretório do nosso arquivo main.py, contendo as tabelas Author e Book. A estrutura do diretório ficou assim:
.
├── codigo_avulso.db
├── main.py
├── model.py
Inserindo dados no banco
Agora, vamos popular nosso banco com alguns autores e seus respectivos livros. Isso pode ser feito de dois modos. Através do método create, quando desejamos inserir um registro apenas; ou pelo método insert_many, quando desejamos inserir vários registros de uma vez em uma mesma tabela.
# Inserimos um autor de nome "H. G. Wells" na tabela 'Author'
author_1 = Author.create(name='H. G. Wells')
book_1 = {
'title': 'A Máquina do Tempo',
'author': author_1,
}
book_2 = {
'title': 'Guerra dos Mundos',
'author': author_1,
}
# Inserimos um autor de nome "Julio Verne" na tabela 'Author'
author_2 = Author.create(name='Julio Verne')
book_3 = {
'title': 'Volta ao Mundo em 80 Dias',
'author': author_2,
}
book_4 = {
'title': 'Vinte Mil Leguas Submarinas',
'author_id': author_1,
}
books = [book_1, book_2, book_3, book_4]
# Inserimos os quatro livros na tabela 'Book'
Book.insert_many(books).execute()
Consultando dados no banco
O Peewee possui comandos destinados a realizar consultas no banco. De maneira semelhante ao conhecido SELECT. Podemos fazer essa consulta de duas maneiras. Se desejamos o primeiro registro que corresponda a nossa pesquisa, podemos utilizar o método get().
book = Book.get(Book.title == "Volta ao Mundo em 80 Dias").get()
book.title
Porém, se desejamos mais de um registro, utilizamos o método select. Por exemplo, para consultar todos os livros escritos pelo autor "H. G. Wells".
books = Book.select().join(Author).where(Author.name=='H. G. Wells')
# Exibe a quantidade de registros que corresponde a nossa pesquisa
print books.count()
for book in books:
book.title
# Resultado:
# * A Máquina do Tempo
# * Guerra dos Mundos
# * Vinte Mil Leguas Submarinas
Também podemos utilizar outras comandos do SQL como limit e group (para mais detalhes, ver a documentação aqui (http://peewee.readthedocs.io/en/latest/index.html)).
Alterando dados no banco
Alterar dados também é bem simples. No exemplo anterior, se observarmos o resultado da consulta dos livros do autor "H. G. Wells", iremos nos deparar com o livro de título "Vinte Mil Léguas Submarinas". Se você, caro leitor, gosta de contos de ficção-científica, sabe que esta obra foi escrito por "Julio Verne", coincidentemente um dos autores que também estão cadastrados em nosso banco. Sendo assim, vamos corrigir o autor do respectivo livro.
Primeiro vamos buscar o registro do autor e do livro:
new_author = Author.get(Author.name == 'Julio Verne')
book = Book.get(Book.title=="Vinte Mil Leguas Submarinas")
Agora vamos alterar o autor e gravar essa alteração no banco.
# Alteramos o autor do livro
book.author = new_author
# Salvamos a alteração no banco
book.save()
Deletando dados do banco
Assim como as operações anteriores, também podemos deletar registros do banco de maneira bem prática. Como exemplo, vamos deletar o livro "Guerra dos Mundos" do nosso banco de dados.
# Buscamos o livro que desejamos excluir do banco
book = Book.get(Book.title=="Guerra dos Mundos")
# Excluimos o livro do banco
book.delete_instance()
Simples não?
Conclusão
É isso pessoal. Este tutorial foi uma introdução bem enxuta sobre o Peewee. Ainda existem muitos tópicos que não abordei aqui, como a criação de primary_key, de campos many2many entre outros recursos, pois foge do escopo deste tutorial. Se você gostou do ORM, aconselho a dar uma olhada também na sua documentação, para conseguir extrair todo o potencial da ferramenta. A utilização de um ORM evita que o desenvolvedor perca tempo escrevendo query SQL e foque totalmente no desenolvimento de código.
Book.create_table()
except peewee.OperationalError:
print 'Tabela Book ja existe!'
Após executarmos o código, será criado um arquivo de nome codigo_avulso.db no mesmo diretório do nosso arquivo main.py, contendo as tabelas Author e Book. A estrutura do diretório ficou assim:
.
├── codigo_avulso.db
├── main.py
├── model.py
Inserindo dados no banco
Agora, vamos popular nosso banco com alguns autores e seus respectivos livros. Isso pode ser feito de dois modos. Através do método create, quando desejamos inserir um registro apenas; ou pelo método insert_many, quando desejamos inserir vários registros de uma vez em uma mesma tabela.
# Inserimos um autor de nome "H. G. Wells" na tabela 'Author'
author_1 = Author.create(name='H. G. Wells')
book_1 = {
'title': 'A Máquina do Tempo',
'author': author_1,
}
book_2 = {
'title': 'Guerra dos Mundos',
'author': author_1,
}
# Inserimos um autor de nome "Julio Verne" na tabela 'Author'
author_2 = Author.create(name='Julio Verne')
book_3 = {
'title': 'Volta ao Mundo em 80 Dias',
'author': author_2,
}
book_4 = {
'title': 'Vinte Mil Leguas Submarinas',
'author_id': author_1,
}
books = [book_1, book_2, book_3, book_4]
# Inserimos os quatro livros na tabela 'Book'
Book.insert_many(books).execute()
Consultando dados no banco
O Peewee possui comandos destinados a realizar consultas no banco. De maneira semelhante ao conhecido SELECT. Podemos fazer essa consulta de duas maneiras. Se desejamos o primeiro registro que corresponda a nossa pesquisa, podemos utilizar o método get().
book = Book.get(Book.title == "Volta ao Mundo em 80 Dias").get()
book.title
Porém, se desejamos mais de um registro, utilizamos o método select. Por exemplo, para consultar todos os livros escritos pelo autor "H. G. Wells".
books = Book.select().join(Author).where(Author.name=='H. G. Wells')
# Exibe a quantidade de registros que corresponde a nossa pesquisa
print books.count()
for book in books:
book.title
# Resultado:
# * A Máquina do Tempo
# * Guerra dos Mundos
# * Vinte Mil Leguas Submarinas
Também podemos utilizar outras comandos do SQL como limit e group (para mais detalhes, ver a documentação aqui (http://peewee.readthedocs.io/en/latest/index.html)).
Alterando dados no banco
Alterar dados também é bem simples. No exemplo anterior, se observarmos o resultado da consulta dos livros do autor "H. G. Wells", iremos nos deparar com o livro de título "Vinte Mil Léguas Submarinas". Se você, caro leitor, gosta de contos de ficção-científica, sabe que esta obra foi escrito por "Julio Verne", coincidentemente um dos autores que também estão cadastrados em nosso banco. Sendo assim, vamos corrigir o autor do respectivo livro.
Primeiro vamos buscar o registro do autor e do livro:
new_author = Author.get(Author.name == 'Julio Verne')
book = Book.get(Book.title=="Vinte Mil Leguas Submarinas")
Agora vamos alterar o autor e gravar essa alteração no banco.
# Alteramos o autor do livro
book.author = new_author
# Salvamos a alteração no banco
book.save()
Deletando dados do banco
Assim como as operações anteriores, também podemos deletar registros do banco de maneira bem prática. Como exemplo, vamos deletar o livro "Guerra dos Mundos" do nosso banco de dados.
# Buscamos o livro que desejamos excluir do banco
book = Book.get(Book.title=="Guerra dos Mundos")
# Excluimos o livro do banco
book.delete_instance()
Simples não?
Conclusão
É isso pessoal. Este tutorial foi uma introdução bem enxuta sobre o Peewee. Ainda existem muitos tópicos que não abordei aqui, como a criação de primary_key, de campos many2many entre outros recursos, pois foge do escopo deste tutorial. Se você gostou do ORM, aconselho a dar uma olhada também na sua documentação, para conseguir extrair todo o potencial da ferramenta. A utilização de um ORM evita que o desenvolvedor perca tempo escrevendo query SQL e foque totalmente no desenolvimento de código.
O Peewee também possui suporte ao flamework flask, então dependendo do tamanho do projeto, pode ser uma alternativa interessante no lugar de ORM mais complexos como o SQLAlchemy.
É isso pessoal. Obrigado pela leitura e até o próximo tutorial!
Referências
Documentação do Peewee (em inglês) (http://peewee.readthedocs.io/en/latest/index.html)
An Intro to peewee – Another Python ORM (https://www.blog.pythonlibrary.org/2014/07/17/an-intro-to-peewee-another-python-orm/)
Introduction to peewee (http://jonathansoma.com/tutorials/webapps/intro-to-peewee/)
Introdução à Linguagem SQL (https://www.novatec.com.br/livros/introducao-sql/)
É isso pessoal. Obrigado pela leitura e até o próximo tutorial!
Referências
Documentação do Peewee (em inglês) (http://peewee.readthedocs.io/en/latest/index.html)
An Intro to peewee – Another Python ORM (https://www.blog.pythonlibrary.org/2014/07/17/an-intro-to-peewee-another-python-orm/)
Introduction to peewee (http://jonathansoma.com/tutorials/webapps/intro-to-peewee/)
Introdução à Linguagem SQL (https://www.novatec.com.br/livros/introducao-sql/)
http://blog.dunderlabs.com/django-boilerplate-a-estrutura-de-projeto-django-que-tenho-usado.html
Vamos falar sobre estruturas de projeto Django? E esse é pra ser o primeiro de uma série sobre Django, pra quem sabe servir como ajuda pra quem tiver iniciando. Todo feedback é super bem vindo :D
Vamos falar sobre estruturas de projeto Django? E esse é pra ser o primeiro de uma série sobre Django, pra quem sabe servir como ajuda pra quem tiver iniciando. Todo feedback é super bem vindo :D
__labs__
Django Boilerplate: A estrutura de projeto Django que tenho usado
Depois de algum tempo utilizando Django e o seu famoso "startproject", você começa a se aventurar em novos caminhos testando novas ...
Continuando a série sobre #Django, vamos utilizar o boilerplate que vimos no post anterior para dar o nosso "startproject". Vem junto! 😎
http://blog.dunderlabs.com/django-iniciando-seu-projeto.html
http://blog.dunderlabs.com/django-iniciando-seu-projeto.html
__labs__
Django startproject: Iniciando o seu projeto
Uma vez que temos a escolha da nossa estrutura, vamos iniciar um projeto Django novo usando esse boilerplate
Forwarded from Botaro Cássio no telegram
Este ano, a PythonBrasil[13] conta com 16 palestras ministradas por mulheres. Destas, 13 ministradas por PyLadies ativas em suas comunidades locais. E este número ainda pode aumentar já que a conferência ainda está confirmando a sua grade do evento! Como no ano passado, estamos lançando uma campanha de apoio financeiro para ajudar as PyLadies que de outra maneira não poderiam comparecer ao evento. Qualquer ajuda é muito bem vinda <3 Se não puder ajudar financeiramente, ajude compartilhando essa mensagem <3 Vamos ajudar a aumentar a visibilidade das mulheres na tecnologia! https://www.catarse.me/pyladies_na_pythonbrasil_13?ref=project_link
Catarse
PyLadies na PythonBrasil[13]
Ajude a aumentar a diversidade na maior conferência da comunidade Python no Brasil.
Using Open Source to Create a Video Thumbnails Service
http://blog.flavioribeiro.com/using-open-source-to-create-a-video-thumbnails-service/
http://blog.flavioribeiro.com/using-open-source-to-create-a-video-thumbnails-service/
Confirmada a palestra "Análise de imagens e machine learning utilizando Python e openCV" - Paula Santos #pybr13… https://t.co/FIc4oLKvTA
Twitter
Python Brasil
Confirmada a palestra "Análise de imagens e machine learning utilizando Python e openCV" - Paula Santos #pybr13 #uaipython
Confirmada a palestra "Serenata de Amor: Inteligência artificial usando dados abertos governamentais" -… https://t.co/qUcuKzixDs
Twitter
Python Brasil
Confirmada a palestra "Serenata de Amor: Inteligência artificial usando dados abertos governamentais" - @jesstemporal #pybr13 #uaipython
Confirmada a palestra "Gênero e Número: Python ajudando nas questões de gênero brasileiras" - @turicas #pybr13… https://t.co/f1NeVhsNfz
Twitter
Python Brasil
Confirmada a palestra "Gênero e Número: Python ajudando nas questões de gênero brasileiras" - @turicas #pybr13 #uaipython
Confirmada a palestra "Bots (automatizando tarefas) um funcionário que não reclama" - @elinaldosoft #pybr13… https://t.co/vVTQNXgZHl
Twitter
Python Brasil
Confirmada a palestra "Bots (automatizando tarefas) um funcionário que não reclama" - @elinaldosoft #pybr13 #uaipython
É com orgulho que anunciamos a @labcodes como patrocinadora da #pybr13! Conheça mais sobre a Labcodes em… https://t.co/m1hP6JHAHo
Twitter
Python Brasil
É com orgulho que anunciamos a @labcodes como patrocinadora da #pybr13! Conheça mais sobre a Labcodes em https://t.co/Tw1HCH83Ra #uaipython