Woof + Localtunnel

Uma dica bem interessante para quem precisa volta e meia compartilhar alguma porta web do seu computador local pela rede e internet.

Assim, digamos que você está fazendo um site em Flask ou Django por exemplo, que fica localmente exporto na porte 5000 ou 8000 geralmente, então você quer que seu amigo, lá da casa dele possa dar uma olhada. Como faz ? Sobe ele para uma hospedagem paga ? Sobe ele para um Heroku da vida ? Trabalheira heim … com o Localtunnel você faz isto muito facilmente. O que ocorre é que ele cria uma url não muito amigável, mas fácil de lembrar até, e esta url aponta para seu micro na porta que você indicou, ou seja, seu amigo acessando a url vai estar acessando o seu aplicativo.

basta um simples comando:

$ localtunnel 5000

Blz !

Agora, o woof é um script em python que facilita muito quem quer rapidamente compartilhar via web, na rede interna, um arquivo ou diretório, ou até mesmo receber um arquivo de alguem. Com o woof você não precisa de servidor web, de samba, de libs, de nada.. apenas Python. Por isto a facilidade ! Claro, ele não é um servidor web para produção obviamente.

Para compartilhar um endereço para upload:

$ python woof.py -U

Para compartilhar um arquivo para downoad:

$ python woof.py [-i <ip_addr>] [-p <port>] [-c <count>] <file>

Agora, imagina você utilizando o woof junto com o localtunnel ? Legal não, você tem a facilidade toda do woof na web mundial ! Uhu !

Fonts:

woof : http://www.home.unix-ag.org/simon/woof.html
l
ocaltunnel: http://progrium.com/localtunnel/

Anúncios

PyCursos

Pessoal, esqueci de comentar com vocês, leitores deste blog, que estão rolando muitos cursos legais, online e baratos de Python no PyCursos ! Entre eles o curso de Flask, que eu mesmo leciono.

Aproveitem já ! Mas se perderam a turma de agora, não se preocupem, mais turmas irão abrir !

http://pycursos.com/flask

 

Outros sites de “gincana” de programação

Fica ai então a dica, do amigo leitor Guaracy, de outros dois sites equivalentes ao Project Euler.

São eles: http://rosettacode.orghttp://www.pythonchallenge.com/

O Python Challenge é um pouco diferente na forma de apresentar as questões, pois você tem que resolver uma para depois ter a próxima disponível, além de ser direcionado a programação Python mesmo. Fora isto, aprenderemos muito igualmente aos outros !

Aproveitem !

Editores e IDEs para Python

O Python é por si só uma grande linguagem e nos dá várias ferramentas que auxiliam na edição dos códigos. Porém estas ferramentas são um tanto quanto manuais.

Tem gente que prefere, mas tem gente que gosta de uma boa IDE para programar, que principalmente nos auxilie a lembrar das coisas com o autocompletar de código, tenha colorização de sintaxe, e por ai vai.. e eu sou um destes !

Então, venho por tempos sempre utilizando algumas IDE, alguns editores mais simples, e a todo tempo trocando de preferência ! hehe Normal, principalmente porque o Python não necessita de uma IDE completa para poder ser programado, mas sim de apenas um terminal de comando e um editor de texto simples.

Abaixo vou listar algumas IDEs que jah utilizei, e outras que somente vi falr, e fazer pequenos comentários sobre cada uma :

KomodoEdit – É a versão free da IDE KomodoIDE, atualmente na versão 6. É uma ótima IDE, mas tem features desativadas pelo fato de ser a versão free.

WingIDE 101 – É a versão free da Wing IDE, que tem também versão professional e personal. Creio que seja uma das mais completas, mas também tem features desativadas.

PyDev – É um plugin para o ambiente do Eclipse, que para mim é ótimo. Porém acaba se tornando um pouco mais pesado do que os outros.

PyCharm – É uma IDE mais nova, e foi desenvolvida direcionada ao Django. Esta é muito bem falada, porém é paga, mas todos os relatos são do nivel: — Vale cada centavo pago! Tem uma versão trial completa por 30 dias.

NINJA-Ide – Me pareceu muito boa, mas ao rodar ela não consegui fazer funcionar de cara o autocompletar. Acabei por desistir de testar mais. Porém me parece ser uma ótima IDE.

Spyder – Um ótimo e leve ambiente integrado de desenvolvimento Python. Funciona juntamente com o pdb para debug e pylint para verificação de código.

Entre todos, neste momento, o Spyder foi a minha escolha.

Porque ?

Porque é um ambiente que facilmente foi instalado, tem uma organização de janelas muito boa por padrão, tem debugger integrado, porém não fugindo da ferramenta da linguagem, que é o pdb, utiliza também o Pylint que é muito competente para averiguação de erros no código e além de tudo, é muito leve. Além de que não precisei fazer nada para tudo sair funcionando de cara, principalmente o autocompletar. Ah, ela é feita em PyQt, então tem que ter esta biblioteca instalada.

Segue uma tela dele logo abaixo.

Spyder Python IDE

Spyder Python IDE

Ok ! Então esta foi minha escolha atual, testada e aprovada!

Comentem e digam qual ide python mais gostam e porque ?

Vlw.. abraços

Repositórios de códigos Python

Muita gente vem estudando e aprendendo Python nos últimos tempos. Vários ( como eu ) guardam seus códigos em algum repositório na web, outros simplesmente postam nos blogs, e por ai vai…

E lendo na lista python-brasil, a dúvida do colega Jayron Soares, resolvi postar estas dicas do pessoal em resposta:

– Onde encontrar códigos Python para exemplos e estudos ? Seguem alguns links…

  1. http://wiki.python.org/moin/
  2. http://www.python.org.br/wiki/CookBook
  3. http://code.activestate.com/recipes/langs/python/
  4. http://sourceforge.net/search/?q=python
  5. https://github.com/search?type=Repositories&language=python
  6. https://bitbucket.org/repo/all?name=Python
  7. http://code.google.com/intl/pt-BR/query/#q=Python
  8. http://djangopackages.com/

E você tem mais alguma dica de local onde encontrar códigos e exemplos de Python ? Comente..

vlw.

MongoDB Online

MongoHG - MongoDB online grátis!

Olhem só que legal !

Navegando pelos links do Twitter eu acabei encontrando o site MongoHQ. Ele disponibiliza bancos de dados NoSQL MongoDB para utilização online com tamanho de até 16MG de dados por banco.

Se você precisar de mais espaço, daí poderá escolher peloa planos pagos Micro, com 356MB, Small com 2GB e Large com 5G, sendo que estes dois últimos utilizam uma instância dedicada do mongodb !

Facilmente você cria um usuário e uma base e pode sair utilizando.

É bem interessante esta opção de bancos online, pois poderemos ter aplicações tanto web quanto desktop que utilizem uma base compartilhada, sem a necessidade de gastar com um servidor a mais e o trabalho deconfigurar o banco e segurança.

O site: https://mongohq.com/

Você pode, depois de criar seu database, importar dados ou criar os documentos via web mesmo, apesar de não muito prático a utilização da interface, quebra um galho quando necessário.

Você pode também adicionar conexões remotas, onde poderá através da interface web, administrar o banco também.

Fica ai a dica !

t+!

Controle de Exceções – try/except/else/finally

Quando programamos, temos sempre que nos preocupar com os erros que podem acontecer no programa. Na minha visão temos 2 tipos de erros: os que esperamos e os que NÃO esperamos ! Os que experamos são aqueles error que sabemos que vão acontecer em um dado momento, que programamos para que fosse assim, ou que sabemos das variações que podem ocorrer em algum tipo de dado/informação esperado, e então controlamos e os outros todos são os que podem acontecer no meio do caminho, como problemas de rede, problemas de banco de dados, problemas de permissão, e por ai vai… Também se formos realmente tentar prever e tratar cada erro que pode ocorrer durante a execução do nosso programa, nossa, vão ser 2/3 de programação só para isto… hehehe

O Python, como uma ótima e completa linguagem que é, tem um ótimo sistema de exceções, tanto para controlá-las como para criar nossos próprios error ( Exceptions ).

Vejamos alguns exemplo que irei explicar e você vai entender, os quais foram tirados justamente do tutorial oficial do Python:
Link: http://docs.python.org/tutorial/errors.html

Basicamente o tratamento de erros no Python é feito com duas expressões: try e except.

try:
    i = 1/0
except:
    print "Ops, Erro!"

Simples.
Isto é o básico para não deixar nosso programa terminar sem uma explicação e pegar qualquer erro que ocorra.

Mas no except podemos expecificar o erro, desta forma:

try:
    i = 1/0
except ZeroDivisionError:
    print "Ops, Erro!"

Assim, definimos que estamos tratando apenas o erro de divisão por zero!
Ok, mas e quando precisamos tratar vários erros ?

Podemos fazer assim:

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except IOError:
    print "I/O error"
except ValueError:
    print "Could not convert data to an integer."

especificando cada erro que queremos tratar em uma seção de except, ou:

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except (IOError, ValueError):
    print "Erro esperado"

Definindo uma lista de erros para serem tratados de uma mesma forma, na mesma seção de except.
Ok, mas e agora como eu pego as informações do erro ?

Bom, podemos definir uma variável para o erro, assim:

try:
    i = 1/0
except ZeroDivisionError as detail:
    print 'Handling run-time error:', detail

Assim, conseguimos buscas as informações do erro com a variável “detail”.
Vejam abaixo:

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
    b = i/0
except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)
except ValueError as erro:
    print "Could not convert data to an integer."
    print "ERRO:", erro
except ZeroDivisionError:
    print "ERRO: Divisão por zero"
except (NameError, ValueError):
    print "Erros estranhos acontecendo!"
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise

Temos um exemplão mais completo, mostrando como :

  • Capturar qualquer erro
  • Capturar erros específicos
  • Capturar vários erros na mesma seção
  • Capturar as informações dos erros

Porém neste trecho de código temos alguns detalhes diferentes, não citados acima:

  • o “sys.exc_info”, que mostra algumas informações sobre o ocorrido erro
  • o “raise”, que joga a exceção para cima, ou seja, que ela seja levada até o proximo try/except ou o método chamador, etc…
  • e as variáveis “errno” e “strerror”, no item do IOError: Isto é pq cada tipo de erro retorna um tipo de informação, que geralmente é a mensagem, mas neste caso, por exemplo, ele pode retornar uma tupla com o código do erro também.

Veja que em ambos os casos funciona:

except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)
#ou
except IOError as erro:
    print "I/O error:", erro

Mas, além disto tudo, temos mais dois itens interessantes, e que podem ser muito úteis também:

  • else = É executado sempre que NÃO ocorrer um erro no try/except, veja:
try:
    f = open(arg, 'r')
except IOError:
    print 'cannot open', arg
else:
    print arg, 'has', len(f.readlines()), 'lines'
    f.close()

Isto garante que aquele código não execute quando ocorrer erro!

  • finally = É executado SEMPRE, ocorrendo ou não ocorrendo erro, veja:
print "Iniciado o processo!"
try:
    f = open("myfile.txt", 'r')
except IOError:
    print 'cannot open', arg
else:
    print arg, 'has', len(f.readlines()), 'lines'
    f.close()
finally:
    print "Finalizado o processo!"

Claro, que este é um exemplo muito simples, mas as vezes precisamos deste ponto para controles mais elaborados.
Então, completando nosso exemplão fica assim:

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
    b = i/2
except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)
except ValueError as erro:
    print "Could not convert data to an integer."
    print "ERRO:", erro
except ZeroDivisionError:
    print "ERRO: Divisão por zero"
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise
else:
    f.close()
    print "Ocorreu tudo ok! Arquivo fechado!"
finally:
    print "Finalizado!"

Ok !? Capatarm ? Qualquer dúvida podem comentar…
E por hoje é só pessoal ! Até mais.