<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python on Humberto Rocha</title><link>https://humberto.io/pt-br/tags/python/</link><description>Recent content in Python on Humberto Rocha</description><generator>Hugo</generator><language>pt-br</language><lastBuildDate>Sun, 20 Nov 2022 15:29:07 -0500</lastBuildDate><atom:link href="https://humberto.io/pt-br/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Desbravando o pygame 5 - Movimento e Colisão</title><link>https://humberto.io/pt-br/blog/desbravando-o-pygame-5-movimento-e-colisao/</link><pubDate>Tue, 10 Sep 2019 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/desbravando-o-pygame-5-movimento-e-colisao/</guid><description>&lt;p&gt;O movimento é uma característica que está presente na maioria dos jogos. Ao saltar entre plataformas, atirar contra a horda de inimigos, pilotar uma nave espacial e correr pelas estradas estamos exercendo movimento, interagindo com o ambiente do jogo, aplicando ações e causando reações.&lt;/p&gt;
&lt;p&gt;Neste capítulo iremos conhecer os conceitos básicos de movimentação de objetos na tela e sua interação com outros elementos através da detecção de colisão.&lt;/p&gt;
&lt;h2 id="movimento"&gt;Movimento&lt;/h2&gt;
&lt;p&gt;Se você vem acompanhando esta série de postagens, teve um breve exemplo de movimentação na postagem sobre &lt;a href="https://humberto.io/pt-br/blog/desbravando-o-pygame-3-game-loop/"&gt;game loop&lt;/a&gt;, onde uma bola que se movimentava quicando pela tela foi implementada.&lt;/p&gt;</description></item><item><title>Publicando meu primeiro Jogo</title><link>https://humberto.io/pt-br/blog/publicando-meu-primeiro-jogo/</link><pubDate>Wed, 28 Aug 2019 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/publicando-meu-primeiro-jogo/</guid><description>&lt;p&gt;Jogos sempre me conectam com tecnologia desde o início.&lt;/p&gt;
&lt;p&gt;Eu e meu pai montamos nosso primeiro computador (um Pentium 286) e a primeira coisa que eu me lembro de fazer, foi jogar os jogos de DOS como Prince of Persia e Lunar Lander. Eu aprendi vários comandos de CLI só para poder jogar os meus jogos favoritos.&lt;/p&gt;
&lt;p&gt;A paixão por jogar e fazer jogos sempre me acompanhou como um hobby. I tenho uma &lt;a href="https://humberto.io/pt-br/tags/pygame/"&gt;série de posts sobre pygame&lt;/a&gt; neste blog onde eu passo pelos conceitos básicos de desenvolvimento de jogos tentando explicar para pessoas que estejam iniciando seu aprendizado na área.&lt;/p&gt;</description></item><item><title>Libs Fantásticas: pipx</title><link>https://humberto.io/pt-br/blog/libs-fantasticas-pipx/</link><pubDate>Thu, 08 Aug 2019 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/libs-fantasticas-pipx/</guid><description>&lt;p&gt;Estou começando esta série para dar dicas sobre bibliotecas que podem ser muito úteis no seu dia a dia, e também para apresentar bibliotecas interessantes nas quais que você deveria ficar de olho.&lt;/p&gt;
&lt;p&gt;Uma das habilidades de um bom Programador é ter a ferramenta certa para realizar seu trabalho, e nada mais apropriado que começar esta série com uma ferramenta que instala outras ferramentas!&lt;/p&gt;
&lt;p&gt;Quantas vezes você já teve que instalar algum programa Python em uma virtualenv que você acabou de criar? Já passou pela frustração de atualizar uma biblioteca e quebrar sua árvore de dependências?&lt;/p&gt;</description></item><item><title>TLDR: Gerando Secret Key para o Django</title><link>https://humberto.io/pt-br/blog/tldr-gerando-secret-key-para-o-django/</link><pubDate>Fri, 12 Jul 2019 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/tldr-gerando-secret-key-para-o-django/</guid><description>&lt;p&gt;Levante a mão quem nunca versionou a &lt;code&gt;SECRET_KEY&lt;/code&gt; do Django no início de um projeto e precisou gerar uma nova na hora de subir pra produção.&lt;/p&gt;
&lt;p&gt;Este &lt;strong&gt;TLDR&lt;/strong&gt; é um lembrete rápido de como você pode regerar uma secret key localmente, sem recorrer a sites na internet para gera-la para você.&lt;/p&gt;
&lt;p&gt;Como o Django gera a secret key no início de um projeto, já existe esta função implementada em seu código e você pode acessá-la desta forma:&lt;/p&gt;</description></item><item><title>TLDR: Leitura e escrita de Unicode em arquivos com Python 2 e 3</title><link>https://humberto.io/pt-br/blog/tldr-leitura-e-escrita-de-unicode-em-arquivos-com-python-2-e-3/</link><pubDate>Thu, 23 Aug 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/tldr-leitura-e-escrita-de-unicode-em-arquivos-com-python-2-e-3/</guid><description>&lt;p&gt;Conversando no Telegram com o &lt;a href="https://twitter.com/queirozMario21"&gt;Mário Sérgio&lt;/a&gt; sobre problemas que surgem ao migrar código entre versões do Python me veio a ideia de escrever este &lt;strong&gt;tldr&lt;/strong&gt; para ajudar quem precisa fazer leitura ou escrita de arquivos que contenham texto com caracteres &lt;a href="https://pt.wikipedia.org/wiki/Unicode"&gt;Unicode&lt;/a&gt; que não estão presentes na tabela &lt;a href="https://pt.wikipedia.org/wiki/ASCII"&gt;ASCII&lt;/a&gt; como caracteres acentuados, alfabetos diferentes do romano e &lt;a href="https://pt.wikipedia.org/wiki/Emoji"&gt;emoji&lt;/a&gt;, através de um código que funcione em ambas versões.&lt;/p&gt;
&lt;p&gt;No Python 2 não existe uma distinção entre &lt;strong&gt;byte&lt;/strong&gt; e &lt;strong&gt;string&lt;/strong&gt;, o que faz com que códigos que lidam com entrada e saída sem o devido cuidado com codificação e decodificação funcionem sem nenhum erro aparente. Mas quando ele acontece deixa muita gente perdida com mensagens deste tipo:&lt;/p&gt;</description></item><item><title>Enviando e recebendo emails com Python</title><link>https://humberto.io/pt-br/blog/enviando-e-recebendo-emails-com-python/</link><pubDate>Fri, 10 Aug 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/enviando-e-recebendo-emails-com-python/</guid><description>&lt;p&gt;Um dia na terça do Python no &lt;a href="https://calango.club/"&gt;Calango Hacker Clube&lt;/a&gt; surgiu uma dúvida de como ler emails do Gmail para poder categorizar as mensagens e automatizar o processo de leitura dos emails usando Python. Esta dúvida motivou esta postagem que tem o objetivo de ajudar a todos que tiverem dúvidas de como começar a interagir com sistemas de troca de emails utilizando Python.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://humberto.io/blog/sending-and-receiving-emails-with-python/assets/python-mail.png" alt="python email"&gt;&lt;/p&gt;
&lt;aside class="tip info"&gt;
 Esta postagem tem como alvo o público iniciante mas também pode ser útil para quem já possuí experiência na linguagem mas nunca tinha trabalhado diretamente com envio e recebimento de emails. A versão do Python utilizada para publicar esta postagem foi a 3.6.x.
&lt;/aside&gt;

&lt;h2 id="os-protocolos-de-email"&gt;Os Protocolos de email&lt;/h2&gt;
&lt;p&gt;Sistemas de email são muito robustos pois são construídos em cima de protocolos muito bem estabelecidos e usados por todas as plataformas de email da internet. Estes protocolos são definidos e publicados através de documentos chamados de &lt;a href="https://en.wikipedia.org/wiki/Request_for_Comments"&gt;RFC&lt;/a&gt; que é uma sigla para Request for Comments que lembram um pouco as &lt;a href="https://www.python.org/dev/peps/"&gt;PEPs&lt;/a&gt; do Python só que para os protocolos que definem a base do funcionamento das comunicações entre sistemas como a internet.&lt;/p&gt;</description></item><item><title>TLDR: Dependências Dev Python no Ubuntu</title><link>https://humberto.io/pt-br/blog/tldr-dependencias-dev-python-no-ubuntu/</link><pubDate>Tue, 19 Jun 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/tldr-dependencias-dev-python-no-ubuntu/</guid><description>&lt;p&gt;Algumas bibliotecas do python como a que usamos para conversar um banco &lt;strong&gt;SQLite&lt;/strong&gt; são na prática um &lt;strong&gt;encapsulamento de um binário externo&lt;/strong&gt;. Nestes casos precisamos que eles estejam instalados em nosso sistema operacional para que determinado pacote python funcione.&lt;/p&gt;
&lt;p&gt;Quando isso acontece, recebemos erros como este:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Para resolver estes problemas basta instalar esta dependência externa que normalmente o sistema já reconfigura tudo para você, mas para quem trabalha múltiplas versões do python e com &lt;a href="https://github.com/pyenv/pyenv"&gt;pyenv&lt;/a&gt; é preciso recompilar todas as versões do python toda vez que lembra de uma dependência externa.&lt;/p&gt;</description></item><item><title>TLDR: Configurando corretamente o default de um Model Field do Django</title><link>https://humberto.io/pt-br/blog/tldr-configurando-corretamente-o-default-de-um-model-field-do-django/</link><pubDate>Wed, 25 Apr 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/tldr-configurando-corretamente-o-default-de-um-model-field-do-django/</guid><description>&lt;p&gt;Esta postagem é o resultado de um &lt;strong&gt;bug&lt;/strong&gt; que me assombrou por uns três meses até conseguir isolar totalmente o erro e, por acontecer em condições muito específicas de temperatura e pressão, tomou muito tempo quebrando cabeça até perceber que o problema era este.&lt;/p&gt;
&lt;aside class="tip warning"&gt;
 &lt;strong&gt;Disclaimer:&lt;/strong&gt; essa informação existe na documentação do &lt;a href="https://docs.djangoproject.com/en/2.0/ref/models/fields/#default"&gt;Django&lt;/a&gt;, porém reforçá-la pode lhe poupar um belo tempo de &lt;strong&gt;debugging&lt;/strong&gt;.
&lt;/aside&gt;

&lt;p&gt;Um dos atributos básicos de um &lt;strong&gt;Model field&lt;/strong&gt; do Django é o &lt;strong&gt;default&lt;/strong&gt; que determina o valor padrão de um campo quando criamos uma instância do &lt;strong&gt;Model&lt;/strong&gt;. Você pode atribuir um &lt;strong&gt;valor&lt;/strong&gt; a ele ou um &lt;strong&gt;callable&lt;/strong&gt; que nada mais é que uma função ou uma classe que implemente o método &lt;code&gt;__call__&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Autenticação JWT com Angular e Django</title><link>https://humberto.io/pt-br/blog/autenticacao-jwt-com-angular-e-django/</link><pubDate>Sun, 15 Apr 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/autenticacao-jwt-com-angular-e-django/</guid><description>&lt;p&gt;Quase todo sistema que opera na internet e armazena dados de usuário hoje em dia depende de uma camada de autenticação. E com o crescimento do modelo de API`s e separação do &lt;strong&gt;frontend&lt;/strong&gt; do &lt;strong&gt;backend&lt;/strong&gt; a implementação desta camada cresceu em complexidade.&lt;/p&gt;
&lt;p&gt;Esta postagem tem como foco mostrar o caminho das pedras em uma stack de frontend &lt;strong&gt;Angular 6&lt;/strong&gt; e backend &lt;strong&gt;Django 2&lt;/strong&gt; utilizando o modelo de separação discutido na postagem &lt;a href="https://humberto.io/pt-bt/blog/separando-o-frontend-do-backend-com-angular-e-django/"&gt;&amp;ldquo;Separando o Frontend do Backend com Angular e Django&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>TLDR: Publicando no PyPI</title><link>https://humberto.io/pt-br/blog/tldr-publicando-no-pypi/</link><pubDate>Mon, 05 Mar 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/tldr-publicando-no-pypi/</guid><description>&lt;p&gt;Já se perguntou como publicar seu próprio pacote Python para instalá-lo com o &lt;a href="https://pypi.python.org/pypi/pip"&gt;pip&lt;/a&gt;? É menos complicado que parece, e qualquer pessoa pode fazer.&lt;/p&gt;
&lt;p&gt;Basta acessar o &lt;a href="https://pypi.python.org/pypi"&gt;Python Package Index (PyPI)&lt;/a&gt; e criar uma conta na qual irá registrar seus pacotes.&lt;/p&gt;
&lt;p&gt;Em seguida crie um arquivo python chamado &lt;code&gt;setup.py&lt;/code&gt; alterando os valores que forem necessários:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#585b70;font-style:italic"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#94e2d5"&gt;from&lt;/span&gt; &lt;span style="color:#fab387"&gt;setuptools&lt;/span&gt; &lt;span style="color:#94e2d5"&gt;import&lt;/span&gt; find_packages, setup
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;setup(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;meu-pacote-python&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; packages&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;find_packages(),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; version&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;1.0.0&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; description&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;Descrição curta do meu pacote&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; long_description&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;Longa descrição do meu pacote&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; author&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;Meu Nome&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; author_email&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;meu@email.com&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; url&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;https://github.com/usuario/meu-pacote-python&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; install_requires&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;[&lt;span style="color:#a6e3a1"&gt;&amp;#39;dependencia1&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#39;dependencia2&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; license&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#39;MIT&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; keywords&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;[&lt;span style="color:#a6e3a1"&gt;&amp;#39;dev&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#39;web&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; classifiers&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#39;Intended Audience :: Developers&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#39;License :: OSI Approved :: MIT License&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#39;Natural Language :: English&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#39;Programming Language :: Python :: 2&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#39;Programming Language :: Python :: 3&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O &lt;code&gt;find_packages&lt;/code&gt; é uma ferramenta muito boa para encontrar automaticamente os arquivos que fazem parte do seu pacote qualquer dúvida veja sua documentação clicando &lt;a href="http://setuptools.readthedocs.io/en/latest/setuptools.html#using-find-packages"&gt;aqui&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>TLDR: Executando comandos em multiplos hosts com Fabric</title><link>https://humberto.io/pt-br/blog/tldr-executando-comandos-em-multiplos-hosts-com-fabric/</link><pubDate>Sat, 17 Feb 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/tldr-executando-comandos-em-multiplos-hosts-com-fabric/</guid><description>&lt;p&gt;Me perguntaram como realizar uma conexão ssh em um servidor para rodar o comando &lt;code&gt;df -h&lt;/code&gt; que mostra o uso de disco da máquina. Logo depois descobri que a dúvida se estendia a como fazer isso em vários servidores.&lt;/p&gt;
&lt;p&gt;A resposta me veio rápido na mente, e junto com ela a ideia de documentar estas coisas, o que me trouxe ao começo desta série de postagens curtas carinhosamente batizada de &lt;strong&gt;TLDR&lt;/strong&gt;, que é a abreviação de &lt;strong&gt;T&lt;/strong&gt;oo &lt;strong&gt;L&lt;/strong&gt;ong &lt;strong&gt;D&lt;/strong&gt;idn`t &lt;strong&gt;R&lt;/strong&gt;ead ou, em português, Muito longo, não li.&lt;/p&gt;</description></item><item><title>Separando o Frontend do Backend com Angular e Django</title><link>https://humberto.io/pt-br/blog/separando-o-frontend-do-backend-com-angular-e-django/</link><pubDate>Tue, 13 Feb 2018 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/separando-o-frontend-do-backend-com-angular-e-django/</guid><description>&lt;p&gt;No mundo do desenvolvimento web as coisas vem evoluindo muito rápido e crescendo em complexidade em um ritmo intenso. Aquele modelo antigo de criação de sites onde tinamos o webmaster que dominava o html e logava no servidor para atualiza uma página é algo cada vez mais raro de se ver. Até para criar sites estáticos estamos utilizando ferramentas para agilizar nosso trabalho.&lt;/p&gt;
&lt;p&gt;Nos últimos anos tivemos um crescimento expressivo dos frameworks javascript e uma grande evolução do frontend como um todo, e estas novas tecnologias possuem ferramentas e fluxos de desenvolvimento próprios, o que vem tornando mais oneroso para um sistema só entregar o backend e o frontend.&lt;/p&gt;</description></item><item><title>Desbravando o pygame 4 - Game of Life</title><link>https://humberto.io/pt-br/blog/desbravando-o-pygame-4-game-of-life/</link><pubDate>Sun, 27 Aug 2017 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/desbravando-o-pygame-4-game-of-life/</guid><description>&lt;p&gt;A um tempo atrás eu fiz uma postagem sobre &lt;a href="https://humberto.io/pt-br/blog/coding-dojo-101/"&gt;como organizar um coding dojo&lt;/a&gt; publicada logo após um dojo de aniversário da comunidade python aqui do DF no qual eu preparei o desafio de implementar o &lt;a href="https://pt.wikipedia.org/wiki/Jogo_da_vida"&gt;jogo da vida&lt;/a&gt; (game of life) do matemático John Horton Conway.&lt;/p&gt;
&lt;p&gt;Para deixar este desafio mais interativo preparei um simulador visual com pygame para testar nossa implementação. Este simulador utiliza de todos os conceitos que vimos até agora nesta série e aproveitando o interesse que ressurgiu no Grupy-DF sobre o assunto decidi reforçar os tópicos até então apresentados com a demonstração desta implementação.&lt;/p&gt;</description></item><item><title>Desbravando o pygame 3 - Game Loop</title><link>https://humberto.io/pt-br/blog/desbravando-o-pygame-3-game-loop/</link><pubDate>Thu, 24 Aug 2017 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/desbravando-o-pygame-3-game-loop/</guid><description>&lt;p&gt;Agora que sabemos como desenhar na tela (&lt;a href="https://humberto.io/pt-br/blog/desbravando-o-pygame-2-desenhando-na-tela/"&gt;postagem anterior&lt;/a&gt;) seria interessante que nosso jogo ficasse rodando até que alguém o feche. Para isso vamos utilizar um dos fundamentos do desenvolvimento de jogos que é o Game Loop.&lt;/p&gt;
&lt;h2 id="conceito"&gt;Conceito&lt;/h2&gt;
&lt;p&gt;Dentro da computação o conceito de ciclo é bastante recorrente, trata-se de uma sequência de ações e tomadas de decisão programadas que se repetem dentro de um laço de repetição (ou loop). No baixo nível temos o processador do computador que trabalha em ciclos de operações aritméticas gerenciadas pelo clock, em sistemas operacionais o ciclo é quem gerencia o tempo de uso do processador, o dividindo entre todas as aplicações do sistema além de verificar se o usuário realizou algum comando, em servidores web usamos um ciclo para verificar se alguém requisitou uma página que será processada e devolvida em forma de resposta. Com jogos não seria diferente.&lt;/p&gt;</description></item><item><title>Desbravando o pygame 2 - Desenhando na Tela</title><link>https://humberto.io/pt-br/blog/desbravando-o-pygame-2-desenhando-na-tela/</link><pubDate>Fri, 03 Feb 2017 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/desbravando-o-pygame-2-desenhando-na-tela/</guid><description>&lt;p&gt;Ao longo de um jogo estamos constantemente desenhando na tela. E agora que já sabemos criar um programa em pygame é hora de começar a desenhar.&lt;/p&gt;
&lt;h2 id="plano-de-desenho"&gt;Plano de desenho&lt;/h2&gt;
&lt;p&gt;Voltando nas aulas de matemática do ensino fundamental fomos apresentados ao plano cartesiano. O plano cartesiano e um espaço bidimensional orientado pelos eixos x e y onde x aumenta para o lado direito e diminui para o lado esquerdo enquanto y aumenta para cima e diminui para baixo:&lt;/p&gt;</description></item><item><title>Desbravando o pygame 1 - Conhecendo a Biblioteca</title><link>https://humberto.io/pt-br/blog/desbravando-o-pygame-1-conhecendo-a-biblioteca/</link><pubDate>Sun, 15 Jan 2017 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/desbravando-o-pygame-1-conhecendo-a-biblioteca/</guid><description>&lt;p&gt;Desenvolver jogos é um lugar comum dentre muitas das pessoas que começam a estudar programação. Comigo não foi diferente, mesmo não seguindo a carreira de desenvolvimento de jogos esta sempre foi uma área que me chamou a atenção.&lt;/p&gt;
&lt;p&gt;Estou criando esta série para aprender mais sobre desenvolvimento de jogos utilizando como ferramenta o &lt;a href="http://www.pygame.org/"&gt;pygame&lt;/a&gt; e para compartilhar minhas descobertas no processo. Irei desbrava-lo partindo de seus princípios básicos até a criação de um pequeno jogo pong single player.&lt;/p&gt;</description></item><item><title>Coding Dojo 101</title><link>https://humberto.io/pt-br/blog/coding-dojo-101/</link><pubDate>Fri, 02 Dec 2016 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/coding-dojo-101/</guid><description>&lt;p&gt;Meu primeiro Coding Dojo aconteceu próximo ao meu primeiro contato com a linguagem Python na faculdade. Um colega de classe (&lt;a href="https://github.com/ravishi"&gt;Dirley&lt;/a&gt;) tinha acabado de voltar da Python Brasil muito animado, pois tinha visto uma palestra sobre o tema e queria colocar em prática com o pessoal da turma. Aquele dia foi muito divertido e talvez um dos mais importantes momentos que me levaram a mergulhar de cabeça na linguagem Python.&lt;/p&gt;</description></item><item><title>GitHub Pages com Pelican e Travis-CI</title><link>https://humberto.io/pt-br/blog/github-pages-com-pelican-e-travis-ci/</link><pubDate>Thu, 05 May 2016 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/github-pages-com-pelican-e-travis-ci/</guid><description>&lt;p&gt;&lt;strong&gt;Publicado originalmente em:&lt;/strong&gt; &lt;a href="http://df.python.org.br/blog/github-pages-com-pelican-e-travis-ci"&gt;df.python.org.br/blog/github-pages-com-pelican-e-travis-ci&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Estou fazendo esta postagem para ajudar quem quer criar seu site no &lt;a href="http://pages.github.com"&gt;GitHub Pages&lt;/a&gt; usando &lt;a href="http://blog.getpelican.com"&gt;Pelican&lt;/a&gt; para a criação das páginas e o &lt;a href="https://travis-ci.org"&gt;Travis-CI&lt;/a&gt; para automatizar a tarefa de geração e publicação.&lt;/p&gt;
&lt;p&gt;Este guia assume que o leitor possua conta no &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; e no Travis-CI e tenha familiaridade com o ambiente python. A versão do pelican utilizada ao elaborar esta publicação foi a 3.6.&lt;/p&gt;
&lt;h2 id="o-github-pages"&gt;O GitHub Pages&lt;/h2&gt;
&lt;p&gt;O GitHub Pages é uma funcionalidade gratuita do GitHub para hospedar conteúdo estático (html, css, js e imagens) e publicar através de um sub-domínio de &lt;strong&gt;github.io&lt;/strong&gt; ou até mesmo de um domínio customizado.&lt;/p&gt;</description></item><item><title>Relacionamentos ManyToMany genéricos com Django</title><link>https://humberto.io/pt-br/blog/relacionamentos-manytomany-genericos-com-django/</link><pubDate>Fri, 29 Apr 2016 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/relacionamentos-manytomany-genericos-com-django/</guid><description>&lt;p&gt;A documentação oficial do django cobre muito bem sua funcionalidade de relacionamento genérico na cardinalidade &lt;code&gt;OneToMany&lt;/code&gt; (um para muitos ou &lt;strong&gt;1:N&lt;/strong&gt;), porém, quando é preciso implementar um relacionamento genérico de &lt;code&gt;ManyToMany&lt;/code&gt; (muitos para muitos ou &lt;strong&gt;N:N&lt;/strong&gt;) não há muita documentação a respeito.&lt;/p&gt;
&lt;p&gt;Recentemente, precisei implementar um &lt;strong&gt;N:N&lt;/strong&gt; com um lado genérico, e encontrei uma biblioteca chamada &lt;a href="http://django-gm2m.readthedocs.io/en/stable/index.html"&gt;django-gm2m&lt;/a&gt; que me foi muito útil nesta tarefa, e vou descrever aqui dando dicas de como implementar evitando possíveis dores de cabeça.&lt;/p&gt;</description></item><item><title>Sites Estáticos com Lektor</title><link>https://humberto.io/pt-br/blog/sites-estaticos-com-lektor/</link><pubDate>Sat, 23 Apr 2016 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/blog/sites-estaticos-com-lektor/</guid><description>&lt;p&gt;Faz pelo menos 4 anos que eu ensaio montar um blog, e neste período já criei alguns para a comunidade, mas quando chegava a hora de criar o meu nunca conseguia chegar ao ponto de publicar.&lt;/p&gt;
&lt;p&gt;Usando ferramentas como o WordPress o problema era a dificuldade de customização e a quantidade de ferramentas e padrões que eu nunca iria usar, além é claro, de não ser &lt;strong&gt;Python&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Em seguida com o &lt;a href="https://pages.github.com"&gt;GitHub Pages&lt;/a&gt; eu descobri o &lt;a href="http://blog.getpelican.com"&gt;Pelican&lt;/a&gt; por indicação do &lt;a href="http://mindbending.org/pt"&gt;Magnun Leno&lt;/a&gt; e comecei a fazer muita coisa com ele, mas da mesma forma com que eu ganhei em liberdade de customização, o processo autoral era o mesmo do desenvolvimento o que em um primeiro momento parece legal não é mesmo? Pois é, mas com o tempo você percebe que isso acaba virando um problema quando você para a escrita de uma postagem para arrumar um &lt;strong&gt;bug&lt;/strong&gt; ou melhorar alguma coisa no layout e lá vamos nós novamente&amp;hellip;&lt;/p&gt;</description></item></channel></rss>