Posts de ‘Andrews Medina’

[Andrews Medina] referências para quem quer aprender go

Sunday, May 12th, 2013

Esse post tem como objetivo ser um guia com alguns links para quem que aprender a linguagem go.

Visão geral sobre a linguagem

Go Tour

Instalando e configurando um ambiente de desenvolvimento

Getting started

How to Write Go Code

Aprendendo sobre a linguagem

Effective Go

Apresentações

Let’s go

A linguagem de programação go

Livros

An introduction to programming in go

Programming in go

Learning go

The way to go

Novidades

http://www.reddit.com/r/golang

E para dúvidas, tem a lista de e-mail golang-nuts.

Espero que gostem :)

[Andrews Medina] a diferença entre atributos de classe e de instância

Monday, April 22nd, 2013

“Qual a diferença entre atributos de classe e de instância em Python?”

Essa é uma dúvida muito comum e bem simples de ser respondida. Mas, antes de repondê-la vou demonstrar o que é um atributo de classe e de instância.

atributo de classe

São atributos que são definidos diretamente a classe.

atributo de instância

São atributos definidos a instância, geralmente através do “self”, que representa a instância de uma classe.

Qual a diferença entre eles?

A diferença é que atributos de classes são compartilhados por todas as instâncias daquela classe. Atributos de instancia são únicos para cada instância.

Por exemplo, todas as modificações feitas na lista “l” da classe “C” afetara a lista para todas as instâncias de “C” pois “l” é um atributo da classe.

Já com as instâncias da classe “D” isso não ocorre pois “l” é um atributo de instância, sendo único para cada instância de “D”:

É importante conhecer esse comportamento para não ter resultados inesperados ao construir uma classe.

[Andrews Medina] try.tsuru.io

Friday, April 12th, 2013

Nós da equipe do PaaS da globo.com estamos lançando o try.tsuru.io como private beta com o objetivo de ser uma maneira fácil das pessoas conhecerem e experimentarem o tsuru.

Com o tsuru, times e desenvolvedores não precisam se preocupar com servidores ou em como executar o deploy, eles podem focar no mais importante: a aplicação.

Com ele é possível escrever aplicações na linguagem da sua escolha, usar serviços como banco de dados SQL ou NoSQl, memcacehd, redis e plugá-los a sua app.

Você gerencia sua app usando a linha de comando ou uma interface web e faz o deploy via git. Tudo isso sendo executado pela infra estruturua do tsuru.

O tsuru é um projeto open source se você quiser conhecer o código, montar seu próprio Paas usando o tsuru, contribuir ou sugerir features/reportar bugs sinta-se a vontade.

[Andrews Medina] Usando splinter em ambientes sem display

Thursday, December 27th, 2012

Splinter é uma ferramenta para automatizar ações de navegadores web. Você pode usar ele para escrever testes, crawlers e etc. Com o splinter você pode rodar o mesmo código em vários navegadores diferentes.

A maioria desses navegadores como o firefox, chrome necessitam de um display para funcionarem. Então, se você tentar usar o splinter para executar ações no firefox em um ambiente sem display você vai se deparar com o seguinte erro:


Error: no display specified

Se você estiver usando linux existe um projeto chamado xvfb que permite que você crie displays virtuais. Para que o splinter com firefox ou chrome funcione em um ambiente sem display, basta instalar o xvfb e usar ele para criar um display virtual.

Para fazer isso no ubuntu, primeiramente instale o xvfb:


$ [sudo] apt-get instal xvfb

Agora vamos criar um display chamado :99


Xvfb :99 &

E exportar uma variável de ambiente que informe o número do display a ser utilizado


export DISPLAY=:99

Assim é possível usar o splinter normalmente!

[Andrews Medina] minhas apresentações na pythonbrasil[8]

Thursday, November 29th, 2012

Aconteceu entre os dias 21 a 14 de novembro a oitava edição da pythonbrasil.

O evento foi ótimo, com vários pythonistas do mundo todo. Vários treinamentos, palestras e palestras informais (conversas no bar e no corredor) de alto nível.

Eu participei ministrando um treinamento e apresentei 3 palestras. O treinamento foi sobre Python 3, e as palestras foram sobre Python 3, Design de Código e Escalabilidade de Aplicações Web. A palestra sobre escalabilidade eu apresentei em conjunto com a minha amiga Flávia Missi.

Para quem quiser, os slides das palestras no slideshare:

Python 3 - tutorial from Andrews Medina
Python 3 from Andrews Medina
Escalando aplicações web from Andrews Medina
Python 3 from Andrews Medina

Não vou escrever muito sobre como foi o evento, mas gostaria de declarar que foi a melhor pythonbrasil que eu já fui!

[Andrews Medina] haskell para pythonistas

Wednesday, July 27th, 2011

No FISL 12 que aconteceu nos dias 29 de junho a 02 de julho de 2011 eu apresentei uma palestra relâmpago cujo o tema foi: “haskell para pythonistas”. A palestra ficou legal, mas 5 minutos é bem pouco para um assunto como esse, então resolvi começar a fazer um “guia” de haskell para desenvolvedores python e esse post é o primeiro dessa série.

Primeiramente, eu não sou um programador haskell fluente, eu apenas utilizei haskell para pequenas brincadeiras, entre elas, resolver algum problemas do projecteuler.net. Mas, já consegui ver várias semelhanças e diferenças entre haskell e python.

paradigma funcional

Diferente de python que é multiparadigma, haskell é puramente funcional. Em linguagens imperativas você passa para o computador uma sequência de tarefas para serem executadas, em uma linguagem puramente funcional você não diz o que fazer mas sim como fazer.

Por exemplo, o fatorial de um número é o produto de todos os números de 1 até esse número. Em haskell a implementação do fatorial seria:


fatorial numero = product [1..numero]

Outro exemplo, seria a sequência de fibonacci. O valor do item de fibonacci com posição 0, deve retornar 0. A posição 1 deve retornar 1 e da posição 2 em diante deve retornar a soma dos valores dos dois itens anteriores na sequência. A implementação em python que é uma linguagem imperativa seria:


def fibonacci(numero):
   if numero == 0:
       return 0
   elif numero == 1:
       return 1
   else:
       return fibonacci(numero - 1) + fibonacci(numero - 2)

Já em haskell:


fibonacci 0 = 0
fibonacci 1 = 1
fibonacci numero = fibonacci(numero - 1) + fibonacci(numero - 2)

lazy evaluation

Haskell só executará o resultado e os parâmetros de uma função quando eles forem necessários. Com esse recurso é possível criar funções que retornem sequências infinitas como a de fibonacci onde é executado apenas os valores necessários:


fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

tipagem estática

Uma das características que haskell tem que difere de python é ter tipagem estática, mas ela tem inferência de tipos, ou seja, o compilador associa implicitamente o tipo da variável conforme o valor dela, assim, não é preciso declarar o tipo de uma váriavel. Por exemplo:


Prelude> let numero  = 10
Prelude> :t numero
numero :: Integer

list comprehensions

List comprehensions é a capacidade de gerar uma lista a partir de outra lista, assim como python, haskell também tem list comprehensions. Por exemplo em python, se eu quiser gerar uma lista com apenas os números ímpares contidos em outra lista:


>>> [numero for numero in [1, 2, 3, 4, 5, 6] if numero % 2]
[1, 3, 5]

A mesma solução usando list comprehensions em haskell:


Prelude> [numero | numero <- [1, 2, 3, 4, 5, 6], odd numero]
[1,3,5]

A diferença de list comprehension em haskell é que é possivel fazer list comprehensions compostas:


Prelude> [numero1 * numero2 | numero1 <- [1, 2, 3, 4], numero2 <- [1, 2, 3, 4]]
[1,2,3,4,2,4,6,8,3,6,9,12,4,8,12,16]

como começar

Para quem está interessado em começar uma aventura no mundo das linguagens funcionais com haskell, eu indico a instalação do ghc (http://hackage.haskell.org/platform/) que é um compilador para haskell e a leitura do learn you a haskell (http://learnyouahaskell.com), que na minha opinião é um dos melhores livros para quem quer começar a programar em haskell.

[Andrews Medina] Splinter sprint de 29 de junho a 02 de julho no FISL

Sunday, June 26th, 2011

Durante o FISL 12 que ocorre de 29 de junho a 02 de julho em Porto Alegre, acontecerá mais um splinter sprint.

O que é o splinter?

Splinter é uma ferramenta opensource para testes de aplicações web utilizando Python. Ele permite que você automatize ações do browser, como visitar URLs, interações com formulários e elementos html.

Página do splinter no github: https://github.com/cobrateam/splinter

Site e documentação do splinter: http://splinter.cobrateam.info/

O que é um splinter sprint?

Um splinter sprint é uma desculpa para desenvolvedores reunirem-se , focados por um tempo para melhorar o splinter, corrigindo bugs, adicionando features e melhorando a documentação.

Qualquer um, em qualquer lugar do mundo, pode participar e contribuir.

Se você nunca contribuiu com o splinter antes, esta é a oportunidade perfeita para você começar!

Como contribuir?

  • Escolha uma issue [issue](http://github.com/cobrateam/splinter/issues)
  • Faça um fork
  • Faça commit e push da sua contribuição
  • Envie um ‘pull request’
  • Não se esqueça: todas as novas features devem serem testadas e documentadas.

Preparando-se para o sprint

Instale um client de IRC, para que você possa juntar-se a nós no canal #cobrateam no Freenode.

Se estiver afim de participar, seja presencialmente no FISL, ou online, sua ajuda será bem vinda!

Para mais informações: https://github.com/cobrateam/splinter/wiki/sprint29jun2011

[Andrews Medina] Dev In Cachu eu fui!

Wednesday, May 4th, 2011

No dia 30 de abril em Cachoeiro de Itapemirim aconteceu o primeiro Dev In Cachu, um evento com o foco de reunir desenvolvedores do sul do Espírito Santo para compartilhar conhecimentos e experiências.

O evento teve um nível bem legal de palestras, falando sobre ensino 2.0, colaboração e software livre, refactoring, TDD e agilidade com a participação de palestrantes como o Jeveaux e Hackin da Giran, Henrique Bastos, Erich Egert da Caelum entre outros.

Além disso contou com uma ótima infra estrutura e organização, tendo coffe breaks e etc.

Eu tive a honra de participar do evento em uma palestra com o Francisco Souza falando sobre o uso de Python para vários propósitos, já que é uma linguagem multi propósitos.

A idéia da palestra era demonstrar 12 trabalhos usando Python, assim como teve os 12 trabalhos de Hércules, mas, devido ao tempo abordamos apenas 4 trabalhos. Mas, vou deixar esse assunto para um outro post.

Para finalizar, os slides da palestra:

[Andrews Medina] classes “new-style”

Thursday, February 10th, 2011

Estava conversando com um amigo sobre classes “new-style” e percebi que alguns desenvolvedores não sabem a diferença em herdar ou não a classe object ao criar uma classe em Python.

Até a versão 2.1 do Python, o tipo de todas as classes em Python era classobj. E qualquer instancia de uma classe era do tipo instance. Ou seja, todas as instâncias eram independentes de suas classes:



>>> class Foo: pass

>>> type(Foo)
<type ‘classobj’>
>>> foo = Foo()
>>> foo.__class__
<class __main__.Foo at 0×1e4570>
>>> type(foo)
<type ‘instance’>

Na versão 2.2 do Python, foi criado as classes ‘new-style’ que unificam classes e tipos. Onde uma classe não é nada mais que um tipo definido pelo programador:



>>> class Bar(object): pass

>>> type(Bar)
<type ‘type’>
>>> Bar.__class__
<type ‘type’>
>>> bar = Bar()
>>> bar.__class__
<class ‘__main__.Bar’>
>>> type(bar)
<class ‘__main__.Bar’>

Outra característica é que uma classe new-style é do tipo ‘type’ assim como as os tipos primitivos, permitindo a criação de tipos baseados nos tipos primitivos:



>>> type(list)
<type ‘type’>
>>> type(Bar)
<type ‘type’>
>>> class MinhaLista(list): pass

>>> type(MinhaLista)
<type ‘type’>

Para manter questões de compatibilidade, na versão 2 do Python as classes são old-style por padrão, para que uma classe seja new-style ela tem que ser uma classe filha de uma classe new-style, onde object é a base das classes new-style. No Python 3 as classes são new-style por padrão e as classes old-style não existem mais (amém).

As classes new-style tem várias características diferentes das old-style, como é facilmente visto no exemplo abaixo:



>>> dir(Foo)
['__doc__', '__module__']
>>> dir(Bar)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Algumas diferenças são: descriptors, method resolution order e chamada de métodos especiais.

Mais informações sobre classes new-style:

[Andrews Medina] Análise de Código em Python

Monday, January 31st, 2011

Análise (estática) de código é um termo utilizado pela análise feita fora do tempo execução de um código, verificando a sua qualidade.

Há várias formas de analisar um código, a sua sintaxe, verificar a ocorrência de elementos não utilizados, código duplicado e etc.

Vou listar aqui algumas ferramentas de análise de código para python, explicar o uso e instalação de cada uma delas.

pep8

Verificar se o código está seguindo as orientações do pep 8.

Instalação:


[sudo] pip install pep8

Uso:


pep8 /diretorio-do-meu-codigo

pylint

Analisa o código procurando por bugs ou por sinais de baixa qualidade. Como:

  • existência de docstring nos métodos
  • variáveis e atributos não definidos
  • pep8
  • métodos, modulos ou objetos importados não utilizados
  • verifica linhas similares

O pylint atribui uma nota ao seu código de acordo com o resultado do teste.

Instalação:


[sudo] pip install pylint

Uso:


pylint /diretorio-do-meu-modulo-python

pyflakes

Verifica se algum modulo ou objeto importado ou uma variável não estão sendo utilizado. Detecta também variávies não definidos.

Instalação:


[sudo] pip install pyflakes

Uso:


pyflakes /diretorio-do-meu-codigo

clonedigger

O objetivo do clonedigger é detectar códigos semelhantes.

Instalação:


[sudo] pip install clonedigger

Uso:


clonedigger /diretorio-do-meu-codigo

O clonedigger gera um arquivo chamado output.html mostrando todas as duplicações.

Bônus: http://pypants.org/

pypants é um site onde você cadastra seu projeto python e ele analisa a qualidade do seu projeto e da uma nota de acordo com o resultado.

Agora, uma vez como o código analisado, fica mais fácil saber o que refatorar para melhorar a qualidade do mesmo.