Arquivo de February, 2008

Python Tips: Calcular Fatorial Usando lambda

Postado por Ricardo Perez em 29/02/2008

Hoje vou passar uma dica muita interessente, para fazer uma função recursiva usando lambda em python, como ja foi postado pelo Gabriel(Inclusive ele me ajudou nesse post) à alguns meses atrás, lambda(não lambida) da o programador a possibilidade de fazer uma função em apenas uma linha. Como exemplo vou usar a manjada função recursiva para calculo do fatorial.

[python]
fatorial = lambda x: ((x maior 1) and x*fatorial(x-1) or 1)
[/python]

Viu como é simples???? eu poderia mostra como ficaria usando a função normal, mas eu teria que escrever muito código e eu to com preguiça de fazer isso agora, vale a pena notar também o if ternário.

ps.:o parser do wordpress bugou o sinal de >(maior) dentro do código.

UPDATE(20/03/2008)!!!!: Pessoal MIL DESCULPAS eu acabei me enganando e trocando o sinal *(que seria o correto) por +, Agradeço ao @Waa pelo alerta!!!

Convertendo HTML em PDF

Postado por Gabriel Verta em 26/02/2008

Esses dias estava precisando converter conteudo HTML em PDF em uma aplicação Python. Ja conhecia o ReportLab, porém é necessário alguns parsers para que as tags html sejam "traduzidas" para o pdf, que podem ser feitos utilizando SGMLlib. A solução mais simples foi utilizar o os com o HTMLDoc utilizando o próprio bash.
A instalação no Ubuntu 7.10 é simples:
[code]
$ sudo aptitude install htmldoc
[/code]
Para outras distribuições existem RPMs para a instalação, além de se poder instalar a partir do fonte.
Para passarmos um arquivo html para pdf o seguinte comando:
[code]
$ htmldoc --webpage -f arquivo.pdf arquivo.html
[/code]
Desta forma eu acesso o bash através de minha aplicação Python, e retorno o PDF do html desejado. ;)

Meu primeiro plugin pro Gedit

Postado por Rafael Sierra em 12/02/2008

A necessidade definitivamente é a mãe da criação, eu tava editando um texto no Gedit e precisei comentar alguns quilos de texto (que foram colocados la apenas para referência e serão apagados) e eu precisei comentar ele, mas não encontrei uma forma fácil de fazer isso no editor, pensei em fazer uma substituição usando expressão regular, mas não encontrei essa opção, então fui dar uma olhada nos plugins:
Plugins

Vi um chamado "Ferramentas externas":
Ferramentas Externas

Dei uma olhada nele e vi que ele permite criar um script na hora, resolvi testar, e foi nisso que deu:
Plugins comentarios

O mais interessante disso é que fica fácil criar qualquer tipo de plugin pro Gedit, como por exemplo um conversor de Restructured Text pra HTML e qualquer outro tipo de coisa bizarra (como um plugin carregador de plugins oO)

Canal por assinatura

Postado por Rafael Sierra em 11/02/2008

Se tem algo que eu realmente gostaria de entender é porque eu não posso simplesmente acessar o site do Discovery Brasil ou do Mundo Fox e pagar um valor X por mês pra ter acesso a mesma programação exibida na televisão paga comum, mas pela internet.

Um esforço nesse sentido é o serviço Google Video, ou pelo menos era, isso porque ele permitia a compra de vídeos específicos pra você assistir, infelizmente não encontrei nenhum exemplo pra colocar aqui, mas mesmo esse modelo tem um problema, eu pago por um único vídeo, se aparecer outro eu preciso (precisava) comprar novamente.

Quando você pensa nos custos de manutenção do modelo de cabos, é até pouco que se paga pelos pacotes de canais, pois pra quem não sabe, a empresa, seja Net, Velox ou qualquer outra empresa de TV a cabo, tem que arcar com os custos dos cabos (e suas manutenções), com o custo de colocação e ainda tem que pagar o aluguel do poste (ou você acha que é só sair pendurando tudo nos postes?), isso sem falar no valor já embutido do suporte ao usuário (nenhum suporte é gratuito).

Agora quando você pensa que as velocidades de navegação na internet estão cada vez crescendo mais (até mesmo no Brasil! Quem diria!), e que essa mesma internet está sub-utilizada (o que? você não sabia?), faz sentido dizer que deveríamos usa-la também para ver TV.

Se você acha que é ruim ficar sentado na frente do computador pra assistir TV, saiba que já existem TVs (daquela que você assiste normalmente) com acesso a internet, ou seja, não existe mais diferença entre um monitor de computador e uma televisão.

Isso sem mencionar que você paga pra não assistir nem 50% dos canais disponíveis, ou você assiste NHK, TCM e outros canais do tipo? (tudo bem, eu assistia NHK as vezes, mas isso não vem ao caso :P ), pois é, aqui eu apenas iria assistir a Fox, Discovery, Warner, Cartoon Network e Nick (é, esses dois também, algum problema?)

Pois bem, quanto tempo eu vou ter que esperar pra remover essas empresas intermediárias do meu pagamento mensal, e usar apenas a internet?

From: Yoshio, To: me, Subject: q boixta

Postado por Rafael Sierra em 8/02/2008

Recebi esse email do Gean, e acho que merece um post :P


from: Yoshio Iwamoto <xxxx@gmail.com>
to: Rafael Jorge <yyyy@gmail.com>,
date: Feb 8, 2008 2:59 AM
subject: q boixta
mailed-by: gmail.com

2:59 AM (8 hours ago)


O Oracle não LIMIT nem OFFSET como o PostgreSQL e o MySQL.

Pra fazer paginação é um parto, tem que usar o ROWNUM, só que olha como essa bosta funciona:

ROWNUM is a pseudocolumn (not a real column) that is available in a
query. ROWNUM will be assigned the numbers 1, 2, 3, 4, ... N, where N
is the number of rows in the set ROWNUM is used with. A ROWNUM value
is not assigned permanently to a row (this is a common misconception).
A row in a table does not have a number; you cannot ask for row 5 from
a table—there is no such thing.

Até ai blz, teoricamente ele deveria funcionar como se fosse um campo virtual da tabela, onde o primeiro registro tem valor 1, e vai incrementando a cada registro:

ROWNUM / campos
1 valor1
2 valor2
3 valor3
...

Daí o obvio eu pensei, era fazer o "LIMIT e OFFSET" no Oracle assim:
[sql]
SELECT campos FROM tabela WHERE ROWNUMBER BETWEEN 11 AND 20 ORDER BY
campo_com_data;
[/sql]

Isso são os resultadados da página 2 se forem 10 resultados por página, certo? Porém:

  1. 1. O ROWNUMBER é calculado antes do ORDER BY, a solução para isso é criando um subselect:
    [sql]
    SELECT *
    FROM (SELECT campos
    FROM tabela
    ORDER BY campo_com_data)
    WHERE ROWNUMBER BETWEEN 11 AND 20;
    [/sql]
  2. 2. O ROWNUMBER não fuciona dessa forma na clausula WHERE, logo tenho que usar ele como um campo, fora do SELECT que contém o ORDER BY:
    [sql]
    SELECT *
    FROM ( SELECT novatabela.*, ROWNUM rnumber
    FROM ( SELECT campos
    FROM tabela
    ORDER BY campo_com_data) novatabela
    )
    WHERE rnumber BETWEEN 11 AND 20;
    [/sql]

  3. 3. Vou me matar

É por essas e outras que tem mais resultados no google sobre como migrar do Oracle para PostgreSQL do que o inverso. E quem migra do PG para o Oracle nunca mais usa Oracle.

Av. Conselheiro Nébias, 368A, Cj. 413
Vila Mathias - Santos - SP
Telefone: (13) 3345-4580

© 2008 - 2009 Stiod. Todos os direitos reservados.