terça-feira, 23 de fevereiro de 2010

Usando MD5 em python

Olá,

muitos já devem conhecer o algoritmo md5, utilizado amplamente em transferencias de arquivos, pois ele efetua um teste de intefridade dos dados.
Ele funciona mais ou menos da seguinte forma: analisa os dados e gera um número único de 128 bits(esse número pode variar conforme o software ou algoritmo que utilizar).
Então a melhor forma(e praticamente única) é testar dois arquivos e analisar seus códigos MD5, se forem iguais é porque os dois arquivos são exatamente iguais ( e quando digo exatamente é porque é, pois a mínima diferença, por menor que seja, gera dois códigos diferentes).

Em python existe um módulo MD5, chamado de ...md5 (sinistro...=P)
Para importar basta digitar no interpretador python:


>>> import md5


Não se preocupe, o md5 é um módulo built-in.

Para gerar o código:


>>> md5.new("string para teste").hexdigest()
'a16ee9e06b3d8f40a5d5d2dc7d88074a'
>>> var = 1
>>> md5.new("%s" % var)
'c4ca4238a0b923820dcc509a6f75849b'
>>> arquivo = open('[arquivo_a_ser_comparado]', 'r').read()
>>> md5.new(arquivo).hexdigest()
'valor_depende_do_arquivo'


Apartir do python 2.5 um novo módulo comessou a ser utilizado, o hashlib, deixando de lado o md5 ( mas ele ainda está presente nas versões superiores, mas com um alerta de preterido).
Uma vantagem do módulo hashlib (além de estar com suporte ativo) é que pode-se obter números de checagem de até 512 bits.
As opções de tamanho de chave são: sha224 para 224 bits, sha256 para 256 bits, sha384 para 384 bits, sha512 para 512 bits e o antigo md5, para 128 bits.


>>> hashlib.sha244('string ou buffer de leitura') #224 bits
>>> hashlib.sha256('string ou buffer de leitura') #256 bits
>>> hashlib.sha384('string ou buffer de leitura') #384 bits
>>> hashlib.sha512('string ou buffer de leitura') #512 bits
>>> hashlib.md5('string ou buffer de leitura') #128 bits


Um exemplo de uso, para quem estiver iniciando em python:
case: se dois arquivos forem identicos, exclua um(em linux):

>>> import hashlib
>>> import os
>>> path_arquivo_1 = '[path].arquivo'
>>> path_arquivo_2 = '[path].arquivo'
>>> arquivo_1 = open(path_arquivo_1).read()
>>> arquivo_2 = open(path_arquivo_2).read()
>>> if hashlib.sha512(arquivo_1) == hashlib.sha512(arquivo_2):
...     print "Excluindo %s, pois ja existe outro arquivo igual a esse." % path_arquivo_2
...     os.system('rm %s' % path_arquivo_2)
... else:
...     print "Os arquivos São diferentes"


É isso aí pessoal, qualquer dúvida, consultar a documentação do python ou perguntar nos comentários.


sexta-feira, 19 de fevereiro de 2010

Módulo python-twitter. Tuitar nunca foi tão legal...

Olá.

Se a maioria tem alguma coisa em comum, é o fato de usarem o twitter.
O twitter se tornou popular por ser um serviço de microblog onde as pessoas "tuitam" frases de no máximo 140 caractéres e seguem outras pessoas. O legal é poder expressar seu status pessoal, idéias, dúvidas, baboseiras e até usar como meio de marketing social.

Pensando em seu público e em como eles podem utilizar o twitter de forma produtiva, seus desenvolvedores disponibilizaram uma API para utilizar o twitter da forma que for melhor para os usuários ou até onde sua criatividade os levar.
Lembrando aos que desconhecem o termo API(Application Programming Interface) ou Interface de Programação de Aplicativos para nós usuários da língua portuguesa, são conjuntos de rotinas e funções para acesso á funcionalidades de um determinado software que podem ser utilizados por terceiros sem que esses tenham acesso ao código do projeto ou tenham que participar do desenvolvimento.
A API geralmente é utilizada em conjunto com outro software como mash-ups.

Mas para que usar a API do twitter? Não é mais fácil somente ir ao site e "tuitar"?

Para alguns (como eu) a interface em modo texto é mais emocionante, leve e prática. Então pode-se utilizar a API para "tuitar" sem necessitar de um navegador (para conexões lentas deve ser uma maravilha, já que não é preciso baixar todo o código do website antes de "tuitar").

Podemos ir muito além disso. Um exemplo seria integrar a API á um CMS ou sistema de website para que, ao postar um artigo, o título ou resumo seja automáticamente "tuitado" com um link para acesso. Ou criar um sistema para marketing social, agilizando o processo de propaganda via twitter.
Enfim, as idéias são muitas.
Na pagina wiki da API do twitter existe uma lista de bibliotecas da API para algumas linguagens, como Python, PHP, C++, Ruby, JavaScript, Java ente outras.

Vou falar da API python-twitter, que como podem reparar é para python.

O download pode ser feito diretamente daqui: http://bit.ly/9tjfjh.
Para instala-lo, basta digitar no terminal:

 $ cd pasta_onde_esta_o_download/ 
 $ tar zxf python-twitter-0.6.tar.gz
 $ cd python-twitter-0.6
 $ python setup.py build
 $ sudo python setup.py install


Se utiliza Debian e suas variantes, como root digite:

 #aptitude install python-twitter


Se quiser testar no terminal. digite esse comando para iniciar o interpretador python:


 $ python


Pronto, agora você está no interpretador python. =P

Importando o módulo:


 >>> import twitter


Fazer a autenticação:


 >>> api = twitter.Api(username='usuario', password='senha')


Para listar quem você está seguindo:


 >>> following = api.GetFriends()
 >>> for amigo in following:
 >>>     print "%s - %s" % (amigo.name, amigo.screen_name)


Para "tuitar":


 >>> msg = 'Estou usando o python-twitter'
 >>> status = api.PostUpdate(msg)


Para ver seu ultimo post:


 >>> print status.text


Para mandar uma Messagem Direta:


 >>> api.PostDirectMessage('usuario', 'Mensagem')


Para seguir um usuário:


 >>> api.CreateFriendship('usuario')


Mais detalhes no manual da API:


 $ pydoc twitter
 $ pydoc twitter.Status
 $ pydoc twitter.User
 $ pydoc twitter.DirectMessage


Ou no site da API - http://code.google.com/p/python-twitter/

Até a próxima.

segunda-feira, 15 de fevereiro de 2010

Projeto para feriadão fictício

Olá...
Chegou o feriado de carnaval, que para mim existe fictíciamente. Decidi então a criar um script,  ou mesmo uma aplicação que faça uma identação em códigos HTML/xHTML, que ja batizei de HTML-CSI(HTML Code Script Indention), que foi dica de Klaus P. Laube.

E qual o objetivo desse projeto, já que o código você identa na hora(é o melhor a se fazer)??

Simples, por duas razões, uma pessoal e outra pra facilitar.
Pessoal porque estou desenvolvendo um projeto de Iniciação Científica(PROINPES) e necessito fazer uma leitura e interpretação de código para efetuar a real função do projeto, analisar o website baseado em SEO.
Então, desenvolvendo um projeto que faça a análise do código e reescreva efetuando a identação, aprendo a fazer essa leitura.
Facilitar porque muitas vezes o código HTML pode não estar identado, ou porque o desenvolvedor anterior não usava essa técnica maravilhosa ou porque o código passou por um processo onde tudo o que não é necessário é eliminado, inclusive espaços e quebra de linha.
Então, utilizando essa ferramenta, se obtém um código legível.

Ele está sendo desenvolvido em Python e utilizando o HTMLParser.

O projeto está hospedado no bitbuket. Basta digitar em seu console o comando(necessita login):
hg clone https://mittmann@bitbucket.org/mittmann/html-csi/

Claro que precisa ter o mercurial instalado. http://mercurial.selenic.com/.

Postarei sobre ele assim que eu termina-lo.

Software Livre, porque usar?

Olá Pessoal.

Hoje tratarei de um assunto que esta em alta, porque usar software livre ou porque migrar para ele.

Primeiramente, Software Livre é qualquer software que tenha como licença, a liberdade de usar, estudar, modificar e redistribuir esse software por parte de quem adquirir.
Portanto, ele deve ter seu código aberto para que outros possam usufruir dessas liberdades.
Muita gente confunde Software Livre com Software Grátis (FreeWare), o que não é correto, pois um Software Livre pode ser vendido e um FreeWare pode ser proprietário (distribuído sem o código fonte, o que geralmente acontece).

Mas então, qual a vantagem de um software livre, se ele pode ser pago?
A vantagem está em poder modificar o software conforme suas necessidades, sem necessitar pagar a terceiros, geralmente os criadores do software, para alterar o aplicativo a sua necessidade (claro que pode ser contratado esses serviços).
Outra vantagem é que, como sendo livre, provavelmente terá uma comunidade envolvida em seu desenvolvimento. Isso implica na não necessidade de depender de um seleto grupo(geralmente uma empresa com fins lucrativos) para que o software evolua e ganhe novas funcionalidades ou ganhe correções de bugs. Até mesmo pode haver o problema de descontinuação do projeto por parte dos criadores( geralmente problemas financeiros ou falta de interesse) dos softwares proprietários. Caso aconteça isso em um software livre, sua comunidade continuará a dar suporte e desenvolve-lo(claro que há exceções, como projetos pequenos demais ou desentendimentos entre membros da comunidade).

Muito provavelmente você já tenha usado Software Livre sem saber. Ao ler este blog, por exemplo, você já esta usando Software livre, pois o servidor que o blogspot.com usa é o Linux (toolbar.netcraft.com/site_report?url=blogspot.com). Muitos sites utilizam linguagens livres em seu desenvolvimento.
Outros exemplos de Softwares Livres conhecidos são:

  • Linux - Sistema Operacional
  • Python, PHP, Java, Ruby, Lua - Linguagens de Programação
  • Apache - Servidor Web
  • MySQL, Postgres - SGDB's
  • Gnome, KDE, Xorg - Ambientes Gráficos 
  • Mozilla Firefox - Navegador Web
  • OpenOffice - Suite Office
  • Django, Wordpress, Joomla, Drupal - CMS's
  • Blender - Poderosa ferramenta de modelagem 3D
  • Eclipse - IDE de desenvolvimento
Para mais detalhes, consulte o site da Free Software Foundation(FSF) - www.fsf.org ou o projeto nacional sobre Software Livre - softwarelivre.org.

Ausência aqui...

Olá Pessoal.

Como perceberam, o blog ficou parado por um tempinho ( estou sendo modesto..rsrs ). Estava com muita coisa pra fazer e decidi dar uma pausa nas publicações.

Mas agora, nesse feriado de mentirinha, decidi voltar com força total, trazendo novidades, artigos, tutoriais e assuntos nosense para os leitores de cleitonmittmann.blogspot.com.

É isso aí pessoal, em breve estarei trazendo as novidades.

Abraços.