domingo, 21 de fevereiro de 2010

Python - Arquivos Executáveis (EXE)

Python é uma linguagem muito interessante, o único problema dela é que ela não gera EXE's nativamente...
Precisamos usar ferramentas como o py2exe, o problema é que sem ler toda a documentação do py2exe, você acaba gerando EXE's, que vem carregados de N arquivos...
Segue duas dicas para gerar um único arquivo EXE, claro que ele fica enorme, 5.2mb, mas é melhor do que um monte de arquivos, em alguns casos...

A primeira é no arquivo setup.py colocar a opção zipfile=None:
setup(windows=['CodigoX.py'],zipfile=None)
Isso faz com que ele deixe de gerar o arquivo library.zip...

Agora a segunda dica é no comando que faz a chamada do py2exe, incluindo o parâmetro --bundle 1:

python setup.py py2exe --bundle 1
Isso faz com que o arquivo gerado, inclua dentro dele mesmo todos os demais arquivos, gerando um EXE mais gordo, mas em tese mais fácil de distribuir...

Outra dica, refere-se a quando fazemos o include de um arquivo .py nosso, o py2exe, pelo menos aqui não inclui ele na library.zip, para inclui-lo, devemos colocar o seguinte parâmetro na chamada do py2exe, --includes SeuArquivoPySemExtensão:
python setup.py py2exe --includes SeuArquivoPySemExtensão --bundle 1
 Pronto com essas dicas, seus executáveis Python serão mais amigáveis aos usuários, e mais fácil de copiar, já que se usarmos o Tkinter, ele cria uma pasta com incríveis 951 arquivos com 4,46MB no total, mas usando no disco 7,08MB... Ou seja, copiar isso para um pendrive demora......

Fonte:
http://ricobl.wordpress.com/2009/04/13/py2exe-multiplos-executaveis-compartilhando-recursos/
http://bytes.com/topic/python/insights/580045-simple-guide-using-py2exe

sábado, 20 de fevereiro de 2010

Guia: Lavando a Louça Corretamente

Segue uma dicas para se lembrar ao lavar a louça, um ótimo guia para iniciar pode ser encontrado aqui.
Mas como não encontrei um guia com as dicas a seguir, resolvi fazer essa lista para ajudar àqueles que querem fazer uma lavagem de qualidade, e evitar constrangimentos com um copo com cara de sujo, ou um prato "limpo" com restos de comida:
  • Ao enxaguar a louça, esfregue a ponta de seus dedos na louça que acabou de ser lavada, se fizer barulho (atrito) é porque está bem lavada, se escorregar é porque está mal lavada;
  • Lembrar na dica acima, que sua mão pode estar suja, e você pensar que está tudo sujo;
  • Lavar o fundo dos copos, se quiser economizar, pelo menos lave a parte interna no mínimo uma vez por semana, isso evita que o fundo do copo fique esbranquiçado;
  • Lembrar de usar palha de aço nas panelas uma vez ou outra, para manter o brilho das mesmas, e tirar as sujeiras mais pesadas;
  • Não usar palha de aço em panelas com Teflon, aliás, o correto é lavar elas com a parte macia da esponja;
  • Se a esponja ficar gordurosa, lave-a com detergente, não tem coisa pior do que lavar sujando a louça;
  • Seja crítico, se quando for guardar a louça, sentir um melado ou escorregadio ou sensação de gordura, lave novamente;
  • Se houverem formigas onde você guarda a louça é sinal de que ela está mal lavada;
  • Ao lavar pratos, veja se não ficou nenhum resíduo, alimentos como queijo derretido tem o costume de colar no prato, e um lavador desatento pode deixar passar;
  • Economize água, ensaboe primeiro, enxague depois, mas não ensaboe tudo, faça em pequenos grupos, senão a louça seca e o sabão perde o efeito;
  • Se for montar uma torre com a louça no escorredor, atente-se para o equilibrio, e a propensão de quedas de alguns materiais, com paciência e técnica, da para chegar em 3 andares...
Com essas dicas espero que sua lavagem tenha uma qualidade superior, mas se houver algum erro, avise, pois não tenho conhecimento técnico para embasar nenhuma delas...

O certo segundo especialistas é usar uma gota de detergente, mas tenha dó, eu uso 10 litros por vez :P....
Um dia testarei e comento a técnica de lavagem que vemos nos filmes, que parece que é chamada Lavar Louça à Holandesa....

quarta-feira, 17 de fevereiro de 2010

Água, muita água!!!

Você já parou para pensar o quanto de água é gasto para fazer uma garrafa de 2 litros de Coca-Cola?

Segue uns números sobre a footprint (pegada) de água que um produto deixa para ser produzido:
  • Um copo de cerveja, 75 litros;
  • Uma xícara de café, 140 litros;
  • Um ovo, 200 litros;
  • Uma garrafa de 2 litros de coca-cola, entre 320 e 492 litros;
  • Um copo de leite, 1000 litros;
  • Um hamburger, 2400 litros;
  • Um kilo de arroz, 3400 litros
  • Um kilo de bífe, 15500 litros;
Ou seja, se você quer ajudar a economizar água, é bom parar de consumir tudo, :P.... E não é só comida que tem water footprint alto:
  • Uma camiseta de algodão, 2700 litros;
  • Um kilo de couro, 16600 litros;
  • Uma calça jeans, 1911 litros;
Se pensar bem, um banho de 15 minutos que gasta uns 135 litros não é nada comparado a esses números...

Os números podem parecer exagerados, mas levam em conta toda a cadeia de produção do produto, até ele chegar em suas mãos...

Fonte:
http://www.waterfootprint.org/?page=files/productgallery
http://online.wsj.com/article/SB123483638138996305.html
1 gallon equivale a aproximadamente 3,78 litros.

domingo, 14 de fevereiro de 2010

Guia PHP + Lighttpd ou Nginx

Segue um guia, feito para eu lembrar como que eu consegui instalar o Lighttpd + PHP...
  • Baixei a versão em ZIP mesmo;
  • Descompactei em uma pasta em que o Lighty vai ficar instalado;
  • O PHP eu baixei aquele VC6, mas acho que como CGI pode ser o VC9 também...
  • O PHP deve ser descompactado em uma pasta sem espaço no endereço;
  • No arquivo lighttpd-inc.conf descomentei as seguintes linhas:
server.modules = ("mod_cgi",)
cgi.assign                  = ( ".php" => "C:/PHP5/php-cgi.exe")
  •  E no arquivo PHP.ini que deixei na mesma pasta do php-cgi.exe, alterei a linha doc_root para ficar igual a linha server.document-root do Lighty.
Pronto, com essas instruções o PHP está operacional no modo CGI...

Agora para rodar no modo FastCGI é mais simples, ou não...
  • Alterar as seguintes linha no lighttpd-inc.conf
server.modules = ("mod_fastcgi",)
fastcgi.server = (".php" =>("localhost" =>("host" => "127.0.0.1","port" => 521 )))
  •  E lembrar de executar o servidor PHP com o comando: php-cgi.exe -b 127.0.0.1:521
  • No caso do FastCGI não tem a frescura de não poder ter espaços no nome, e precisar definir o doc_root...
  • A única desvatagem é precisar executar o php-cgi.exe manualmente...
Baixei essa versão do Lighttpd, aqui...

Um ótimo guia de como instalar, eu só tive problemas por causa do lazy read...
http://redmine.lighttpd.net/wiki/1/TutorialLighttpdAndPHP

Agora um guia para instalar Nginx + PHP:
O funcionamento do PHP se dá da mesma forma que no FastCGI acima, a única diferença são as configurações do nginx.conf e do php.ini:
  • No php.ini deve ser configurado a doc_root;
  • Caso vá colocar o root em outro lugar, alterar as seguintes linhas do nginx.conf:
server {
  location / {
     root "D:Apache Base/";
     index  index.html index.htm index.php;
  }
}
  location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:521;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  "D:/Apache Base/$fastcgi_script_name";
            include        fastcgi_params;
        }
Um site que me ajudou a entender o Nginx: http://eksith.wordpress.com/2008/12/08/nginx-php-on-windows/

Espero que isto ajude a instalar esses servidores que não são o Apache...
Em termos de consumo de memória, os três são identicos, mas aqui é um servidor de testes, sem carga... 10MB para cada de RAM, inclusive o php-cgi.exe....

Firefox - Atualização Silenciosa

Segue instruções de como fazer com que o Firefox pare de encher o saco perguntando se você quer atualizar o próprio Firefox ou seus complementos (addons)....
Entre no about:config e defina os seguintes valores:
app.update.mode=1;
app.update.silent=true;
Eu uso o modo 0, mas o 1 é para evitar que o Firefox se atualize e acabe afetando o funcionamento de algum complemento incompatível...

Fonte:

Windows Update - Windows 7 - Tela em Branco

As vezes, sem motivo algum a tela do Windows Update do Windows 7, fica vazia, mesmo havendo updates importantes ou opcionais, ao clicar para ver a lista detalhada, ela simplesmente aparece em branco...
A instalação funciona normal dos importantes, e após o reboot com o update, a lista volta a funcionar...
Mas se só resetar, sem instalar os updates ela continua...
Aqui tem uma foto de como fica a tela: http://www.windows7taskforce.com/view/2487
Aqui temos uma possível solução ao problema: http://www.windowsreference.com/windows-vista/fix-for-windows-update-page-is-blank-in-vista/
Assim que o problema surgir novamente eu coloco aqui se funciona ou não, mas segue as instruções da correção do site:

regsvr32 jscript
regsvr32 vbscript
regsvr32 /i mshtml
É só rodar esses três comandos, e aparentemente resolve...
Se quiser pesquisar o problema as palavras-chave são: windows 7 update blank.

quinta-feira, 11 de fevereiro de 2010

jQuery Abrir Links em Div

Um código simples que faz com que todos os links da página abram em um DIV....
$('a').click(function(e){
    e.preventDefault()
    $('#DivDestino').load($(this).attr('href'))
})
No jeito que está não é muito recomendável usar, o melhor é limitar quais <a> vão abrir no DIV, e também prestar atenção se a página tiver Javascript, pois o Load não executa ele....

segunda-feira, 8 de fevereiro de 2010

jQuery Enter To Tab Emulation

Procurando na internet uma solução que usasse jQuery para emular tab com enter nos forms, encontrei este site: http://www.rambeck.com/blog/2008/05/jquery-enter-tab

Para aplicar o código usado neste site usei o seguinte código:

function checkForEnter (event) {
    if (event.keyCode == 13) {
        currentBoxNumber = textboxes.index(this);
        if (textboxes[currentBoxNumber + 1] != null) {
            nextBox = textboxes[currentBoxNumber + 1]
            nextBox.focus();
            nextBox.select();
            event.preventDefault();
            return false;
        }
    } 
}

function AtivarEnterEmulation()
{
    textboxes = $('input.data-entry')
    if ($.browser.mozilla) {
        textboxes.keypress(checkForEnter);
    } else {
        textboxes.keydown(checkForEnter);
    }
}
$(function() {
    textboxes = null
    AtivarEnterEmulation()
}
Lembrando que o código só funcionará nos INPUT com a Classe "data-entry", é possível fazer para todos os INPUT's mas pode causar efeitos indesejados como enter pra pesquisar...

Esse código só funciona com itens INPUT, SELECT, OPTION e outros não... Estou estudando para tornar posísivel com eles também...

Segue link do código no Pastebin: http://pastebin.com/f21db529e

quinta-feira, 4 de fevereiro de 2010

Calculando Vencimentos de Acordos no PHP

Acabei de postar este script no PHPBrasil: Calcular Datas de Vencimentos Mensais

Estou usando ele no meu App, para calcular as datas de vencimentos de acordos, se bem que ele faz parte de um conjunto maior, que estarei postando assim que ele estiver pronto.

O legal do código é a simplicidade, sem fórmulas complexas...
Apenas 11 linhas de código e 2 if's apenas...