FTPLIB com progresso no upload

Julho 27th, 2007

Desde que comecei a me aventurar com python tinha a seguinte dúvida:

“Como fazer upload com ftplib.FTP exibindo o progresso?”

Hoje resolvi, com mais maturidade na linguagem, tentar resolver tal problema novamente.

A base da solução foi como a dica da lista python-brasil:

herdar a classe FTP, do módulo ftplib e sobrescrever o método storbinary.

O “pulo do gato” é um pequeno detalhe que se aprende com a vida:

Acontece que o método storbinary possui um parametro “blocksize” que determina de quantos em quantos bytes o arquivo será lido dentro de um loop while que só acaba quando quando todo o arquivo for varrido e enviado.

Aí vem o grande lance:

ao invés de fazer o storbinary simplesmente dar um return quando todo o arquivo for enviado, fez-se necessário usar um generator yield, para tornar o storbinary iterável, retornando a cada loop uma tupla contendo 2 itens: a quantidade de bytes já enviada e o total de bytes do arquivo.

Daí basta iterar sobre o storbinary e usar as informações da maneira necessária.

Essa maneira é interessante pois pode-se generalizar o uso da informação de porcentagem enviada.

No meu caso, usei numa GtkProgressbar.

Leia o restante… »

Django no dreamhost

Julho 23rd, 2007

Ontem eu assinei o dreamhost para fins principalmente pythonicos e, é claro, pela banda e espaço em disco.

Fui logo animado para fazer o "deployment" de django lá, coisa que eu nem fazia idéia de como fazer (sem trocadilhos).

Uma breve busca no google e achei de cara este link:

http://wiki.dreamhost.com/index.php/Django

Segui fielmente mas mesmo assim não deu certo, até fiquei bem desanimado ao ler que o django não é oficialmente suportado pelo dreamhost.

Foi aí que eu pedi socorro ao meu amigo Walter, este sim foi a salvação.

Ele me mostrou que o problema estava no dispatch.fcgi, modificou pra eu ver, e a coisa realmente funcionou.

Resolvi deixar o script mais genérico e compatível com o tutorial e divulgar aqui caso alguém precise algum dia:

PYTHON:
  1. #!/usr/bin/python2.4
  2. import sys, os
  3.  
  4. # Add a custom Python path.
  5. #sys.path.insert(0, "/usr/bin/")
  6. DJANGOPATH = lambda y:os.path.join(os.path.expanduser('~'),y)
  7. PROJECT_PATH = DJANGOPATH('django/django_projects/nomedoprojeto')
  8. sys.path.append(DJANGOPATH('django/django_src'))
  9. sys.path.append(DJANGOPATH('django'))
  10. sys.path.append(DJANGOPATH('django/django_projects'))
  11. sys.path.append(PROJECT_PATH)
  12. # Switch to the directory of your project. (Optional.)
  13. os.chdir(PROJECT_PATH)
  14.  
  15. # Set the DJANGO_SETTINGS_MODULE environment variable.
  16. os.environ['DJANGO_SETTINGS_MODULE'] = "nomedoprojeto.settings"
  17.  
  18. from fcgi import WSGIServer
  19. from django.core.handlers.wsgi import WSGIHandle
  20. WSGIServer(WSGIHandlPROJECT_PATHer()).run()

Detalhe para o cabeçalho:

PYTHON:
  1. #!/usr/bin/python2.4

Pois o python padrão do dreamhost é o 2.3

Nação de volta ao ar!

Julho 23rd, 2007

O nação deu uma caída breve mas já está de volta.

Meme - Avatar simpson

Julho 16th, 2007

Apesar de achar memes coisas um pouco "miguxíticas", vou copiar a idéia do Éder Marques quero ver o que vai dar jogando esse meme na blogosfera:

Como é seu avatar Simpson?

Infelizmente é preciso o plugin do flash, mas é legal!

O meu avatar ficou assim:

A única coisa que deixou-o menos fiel foi o cabelo,mas ficou bem engraçado!

Agora eu convido:

Walter Cruz

Cypherbios

LedStyle

Hamacker

É isso aí!

VAmUxXx lAh GAlErAH!!!!! VAI sE eNGrAXXaDU!!!!!

Friendly Interactive Shell – Shell interativo e amigável

Julho 12th, 2007

Fish Shell
(Friendly Interactive Shell – Shell interativo e amigável)

A cada dia a palavra amigável ganha espaço na comunidade linux e tornou-se motivo nota em muitos meios de comunicação. Eu que sou novato (menos de 5 anos de uso) tenho visto um crescimento gigantesco nos últimos 2 anos, principalmente com relação a interface, as distribuições e ao usuário que finalmente utilizaria o linux sem recorrer a tenebrosa tela de preta para comandos, ou,para muitos de nos, o shell.

O Fish é um shell que visa mudar um pouco este receio através de duas funções: ser amigável e interativo. Seja na hora de listar as opções do usuário, alocando curtas descrições ou mesmo o avisando de possibilidades por meio de cores ou chamadas intuitivas.

A instalação do Fish é bem simples no Ubuntu 7.04, e pode ser feita pelo Synaptic (Menu Superior Sistema -> Administração -> Gerenciador de pacotes Synaptic) clique encima de qualquer pacote uma vez e digite fish e logo o determinado pacote irá aparecer. Com o botão direito do mouse selecione a opção Marcar para instalação, em seguida, clique no botão superior Aplicar. Todo este processo deve ser feito em um computador conectado a internet.

Na pagina http://fishshell.org/index.php do projeto temos a informação de que existem pacotes para o Fedora, Debian, Arch linux e outros o que torna a sua disposição para praticamente a maioria das distribuições .deb ou .rpm, mas sua instalação não será tão simples quanto a do ubuntu.

O que torna o Fish diferente?

Para melhor responder a perguntar, utilizarei de exemplos. Ativo o Fish abrindo o terminal do Gnome (Aplicações -> Acessórios -> Terminal) e digito fish seguido de enter. Logo sou recebido no novo shell.

01.png

Em seguida descubro que o Fish marca em vermelho os comandos que não estão disponíveis ou ainda não foram completados. No exemplo abaixo cle esta em vermelho porque não existe nenhum comando com esta especificação.

02.png

Se eu não sei nada sobre o comando, teclo tab duas vezes para que me seja listada as opções disponíveis que comecem com cle, o Fish me dá um ajuda me especificando também o que cada comando faz!

03.png

Se a minha intenção é navegar por diretórios, no Fish os destinos colocados após o comando cd (para mudar de diretório) são marcados com uma linha. Outra opção interessante são os comandos personalizados como o open para abrir determinado documento, buscando automaticamente o programa especificado nas variáveis do sistema, responsável por abri-lo.

Caso eu não saiba quais documentos podem ser abertos com o open e o que eles são, eu novamente teclo tab duas vezes após o open.

04.png

Buscando por mais

O manual de ajuda do Fish é um pouco diferente do que estamos acostumados. O comando help retorna a abertura de browser (o que for padrão do sistema X Windows em uso) com um manual de fácil consulta, que infelizmente por enquanto esta em inglês.
Na pagina do projeto temos também um FAQ que ajuda a verificar os comandos personalizados pelo Fish.

Inclusive na hora de programar temos a disposição sintaxes diferenciadas do padrão bash. No link API documentation podemos ter um geral desta sintaxe e das opções flexíveis para desenvolver scripts.

Uma observação importante é que o Manual do site esta bem mais atualizado do que o que é instalado por default no Ubuntu e esta localizado no /usr/share/doc/fish

Como eu faço para colocar o fish como o meu shell padrão?
(Tradução livre e adaptada do manual on line)

Se você instalou o Fish peixes (por exemplo compilando em vez de usar um gerenciador de pacotes), você necessita primeiramente adicionar o Fish à lista dos shells executaveis, través do seguinte comando (o supondo que você instalou o Fish em /usr/local) e esteja utilizando o terminal como root:

# eco /usr/local/bin/fish >>/etc/shells

Se você instalar uma versão do Fish de um pacote, o gerenciador de pacotes já deve ter feito isto para você. A fim mudar o seu shell patrão, digite:

chsh - s /usr/local/bin/fish

Você poderá encontra a necessidade de ajustar o diretório acima, como por exemplo usa-lo como /usr/bin/fish.

Obs: O Fish foi matéria da Linux Magazine numero 26 de Dezembro de 2006, resolvi dá um atualizada nos exemplos e na pagina do projeto para possibilita um fator de fácil acesso ao usuário iniciante que se sentiu atraído por ele. Lembrando que o padrão bash ainda é dominante e tem seu pedaço justificado da maioria dos linux, sendo o fish uma opção amigável para quem tem dor de cabeça com a linha de comando.