<?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>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>
&lt;p>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>
&lt;h2 id="movimento">Movimento&lt;/h2>
&lt;p>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/">game loop&lt;/a>, onde uma bola que se movimentava quicando pela tela foi implementada.&lt;/p></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>Jogos sempre me conectam com tecnologia desde o início.&lt;/p>
&lt;p>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>
&lt;p>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/">série de posts sobre pygame&lt;/a> 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></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>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>
&lt;p>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>
&lt;p>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></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>Levante a mão quem nunca versionou a &lt;code>SECRET_KEY&lt;/code> do Django no início de um projeto e precisou gerar uma nova na hora de subir pra produção.&lt;/p>
&lt;p>Este &lt;strong>TLDR&lt;/strong> é 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>
&lt;p>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></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>Conversando no Telegram com o &lt;a href="https://twitter.com/queirozMario21">Mário Sérgio&lt;/a> sobre problemas que surgem ao migrar código entre versões do Python me veio a ideia de escrever este &lt;strong>tldr&lt;/strong> para ajudar quem precisa fazer leitura ou escrita de arquivos que contenham texto com caracteres &lt;a href="https://pt.wikipedia.org/wiki/Unicode">Unicode&lt;/a> que não estão presentes na tabela &lt;a href="https://pt.wikipedia.org/wiki/ASCII">ASCII&lt;/a> como caracteres acentuados, alfabetos diferentes do romano e &lt;a href="https://pt.wikipedia.org/wiki/Emoji">emoji&lt;/a>, através de um código que funcione em ambas versões.&lt;/p>
&lt;p>No Python 2 não existe uma distinção entre &lt;strong>byte&lt;/strong> e &lt;strong>string&lt;/strong>, 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></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>Um dia na terça do Python no &lt;a href="https://calango.club/">Calango Hacker Clube&lt;/a> 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>
&lt;p>&lt;img src="https://humberto.io/blog/sending-and-receiving-emails-with-python/assets/python-mail.png" alt="python email">&lt;/p>
&lt;aside class="tip info">
 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>

&lt;h2 id="os-protocolos-de-email">Os Protocolos de email&lt;/h2>
&lt;p>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">RFC&lt;/a> que é uma sigla para Request for Comments que lembram um pouco as &lt;a href="https://www.python.org/dev/peps/">PEPs&lt;/a> do Python só que para os protocolos que definem a base do funcionamento das comunicações entre sistemas como a internet.&lt;/p></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>Algumas bibliotecas do python como a que usamos para conversar um banco &lt;strong>SQLite&lt;/strong> são na prática um &lt;strong>encapsulamento de um binário externo&lt;/strong>. Nestes casos precisamos que eles estejam instalados em nosso sistema operacional para que determinado pacote python funcione.&lt;/p>
&lt;p>Quando isso acontece, recebemos erros como este:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-console" data-lang="console">&lt;span style="display:flex;">&lt;span>ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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">pyenv&lt;/a> é preciso recompilar todas as versões do python toda vez que lembra de uma dependência externa.&lt;/p></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>Esta postagem é o resultado de um &lt;strong>bug&lt;/strong> 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>
&lt;aside class="tip warning">
 &lt;strong>Disclaimer:&lt;/strong> essa informação existe na documentação do &lt;a href="https://docs.djangoproject.com/en/2.0/ref/models/fields/#default">Django&lt;/a>, porém reforçá-la pode lhe poupar um belo tempo de &lt;strong>debugging&lt;/strong>.
&lt;/aside>

&lt;p>Um dos atributos básicos de um &lt;strong>Model field&lt;/strong> do Django é o &lt;strong>default&lt;/strong> que determina o valor padrão de um campo quando criamos uma instância do &lt;strong>Model&lt;/strong>. Você pode atribuir um &lt;strong>valor&lt;/strong> a ele ou um &lt;strong>callable&lt;/strong> que nada mais é que uma função ou uma classe que implemente o método &lt;code>__call__&lt;/code>.&lt;/p></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>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>frontend&lt;/strong> do &lt;strong>backend&lt;/strong> a implementação desta camada cresceu em complexidade.&lt;/p>
&lt;p>Esta postagem tem como foco mostrar o caminho das pedras em uma stack de frontend &lt;strong>Angular 6&lt;/strong> e backend &lt;strong>Django 2&lt;/strong> 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/">&amp;ldquo;Separando o Frontend do Backend com Angular e Django&amp;rdquo;&lt;/a>.&lt;/p></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>Já se perguntou como publicar seu próprio pacote Python para instalá-lo com o &lt;a href="https://pypi.python.org/pypi/pip">pip&lt;/a>? É menos complicado que parece, e qualquer pessoa pode fazer.&lt;/p>
&lt;p>Basta acessar o &lt;a href="https://pypi.python.org/pypi">Python Package Index (PyPI)&lt;/a> e criar uma conta na qual irá registrar seus pacotes.&lt;/p>
&lt;p>Em seguida crie um arquivo python chamado &lt;code>setup.py&lt;/code> alterando os valores que forem necessários:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6c7086;font-style:italic">#!/usr/bin/env python&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6c7086;font-style:italic"># -*- coding: utf-8 -*-&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#94e2d5">from&lt;/span> &lt;span style="color:#fab387">setuptools&lt;/span> &lt;span style="color:#94e2d5">import&lt;/span> find_packages, setup
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>setup(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;meu-pacote-python&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> packages&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>find_packages(),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;1.0.0&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> description&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;Descrição curta do meu pacote&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> long_description&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;Longa descrição do meu pacote&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> author&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;Meu Nome&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> author_email&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;meu@email.com&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> url&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;https://github.com/usuario/meu-pacote-python&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> install_requires&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>[&lt;span style="color:#a6e3a1">&amp;#39;dependencia1&amp;#39;&lt;/span>, &lt;span style="color:#a6e3a1">&amp;#39;dependencia2&amp;#39;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> license&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>&lt;span style="color:#a6e3a1">&amp;#39;MIT&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keywords&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>[&lt;span style="color:#a6e3a1">&amp;#39;dev&amp;#39;&lt;/span>, &lt;span style="color:#a6e3a1">&amp;#39;web&amp;#39;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> classifiers&lt;span style="color:#89dceb;font-weight:bold">=&lt;/span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e3a1">&amp;#39;Intended Audience :: Developers&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e3a1">&amp;#39;License :: OSI Approved :: MIT License&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e3a1">&amp;#39;Natural Language :: English&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e3a1">&amp;#39;Programming Language :: Python :: 2&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e3a1">&amp;#39;Programming Language :: Python :: 3&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>O &lt;code>find_packages&lt;/code> é 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">aqui&lt;/a>.&lt;/p></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>Me perguntaram como realizar uma conexão ssh em um servidor para rodar o comando &lt;code>df -h&lt;/code> 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>
&lt;p>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>TLDR&lt;/strong>, que é a abreviação de &lt;strong>T&lt;/strong>oo &lt;strong>L&lt;/strong>ong &lt;strong>D&lt;/strong>idn`t &lt;strong>R&lt;/strong>ead ou, em português, Muito longo, não li.&lt;/p></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>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>
&lt;p>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></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>A um tempo atrás eu fiz uma postagem sobre &lt;a href="https://humberto.io/pt-br/blog/coding-dojo-101/">como organizar um coding dojo&lt;/a> 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">jogo da vida&lt;/a> (game of life) do matemático John Horton Conway.&lt;/p>
&lt;p>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></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>Agora que sabemos como desenhar na tela (&lt;a href="https://humberto.io/pt-br/blog/desbravando-o-pygame-2-desenhando-na-tela/">postagem anterior&lt;/a>) 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>
&lt;h2 id="conceito">Conceito&lt;/h2>
&lt;p>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></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>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>
&lt;h2 id="plano-de-desenho">Plano de desenho&lt;/h2>
&lt;p>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></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>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>
&lt;p>Estou criando esta série para aprender mais sobre desenvolvimento de jogos utilizando como ferramenta o &lt;a href="http://www.pygame.org/">pygame&lt;/a> 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></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>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">Dirley&lt;/a>) 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></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>&lt;strong>Publicado originalmente em:&lt;/strong> &lt;a href="http://df.python.org.br/blog/github-pages-com-pelican-e-travis-ci">df.python.org.br/blog/github-pages-com-pelican-e-travis-ci&lt;/a>&lt;/p>
&lt;p>Estou fazendo esta postagem para ajudar quem quer criar seu site no &lt;a href="http://pages.github.com">GitHub Pages&lt;/a> usando &lt;a href="http://blog.getpelican.com">Pelican&lt;/a> para a criação das páginas e o &lt;a href="https://travis-ci.org">Travis-CI&lt;/a> para automatizar a tarefa de geração e publicação.&lt;/p>
&lt;p>Este guia assume que o leitor possua conta no &lt;a href="http://github.com">GitHub&lt;/a> 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>
&lt;h2 id="o-github-pages">O GitHub Pages&lt;/h2>
&lt;p>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>github.io&lt;/strong> ou até mesmo de um domínio customizado.&lt;/p></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>A documentação oficial do django cobre muito bem sua funcionalidade de relacionamento genérico na cardinalidade &lt;code>OneToMany&lt;/code> (um para muitos ou &lt;strong>1:N&lt;/strong>), porém, quando é preciso implementar um relacionamento genérico de &lt;code>ManyToMany&lt;/code> (muitos para muitos ou &lt;strong>N:N&lt;/strong>) não há muita documentação a respeito.&lt;/p>
&lt;p>Recentemente, precisei implementar um &lt;strong>N:N&lt;/strong> com um lado genérico, e encontrei uma biblioteca chamada &lt;a href="http://django-gm2m.readthedocs.io/en/stable/index.html">django-gm2m&lt;/a> 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></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>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>
&lt;p>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>Python&lt;/strong>.&lt;/p>
&lt;p>Em seguida com o &lt;a href="https://pages.github.com">GitHub Pages&lt;/a> eu descobri o &lt;a href="http://blog.getpelican.com">Pelican&lt;/a> por indicação do &lt;a href="http://mindbending.org/pt">Magnun Leno&lt;/a> 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>bug&lt;/strong> ou melhorar alguma coisa no layout e lá vamos nós novamente&amp;hellip;&lt;/p></description></item></channel></rss>