Um módulo Python pequeno, com uma única função muito simples, mas que você precisa conhecer é o glob. O que ele faz é obter uma listagem de diretório: import glob files=glob.glob('*') O que equivale a: import os files=os.listdir('.') Porém o glob é muito poderoso. Podemos fazer: glob.glob('*.mad') Ou: glob.glob('../pasta/*') Fica a dica. mais...
Um módulo Python pequeno, com uma única função muito simples, mas que você precisa conhecer é o glob. O que ele faz é obter uma listagem de diretório:
import glob
files=glob.glob('*')
O que equivale a:
import os
files=os.listdir('.')
Porém o glob é muito poderoso. Podemos fazer:
glob.glob('*.mad')
Ou:
glob.glob('../pasta/*')
Fica a dica.
Semana passada participei de um curso sobre HTML5 ministrado pela w3c Brasil. Nesse curso o Elcio Ferreira foi o instrutor, eu fiquei com uma duvida e fiz uma pergunta para ele sobre a necessidade de incluir a extensão do arquivo na tag <video> para que o mesmo funcione no firefox. Ele me mostrou uma forma [...] mais...
Semana passada participei de um curso sobre HTML5 ministrado pela w3c Brasil. Nesse curso o Elcio Ferreira foi o instrutor, eu fiquei com uma duvida e fiz uma pergunta para ele sobre a necessidade de incluir a extensão do arquivo na tag <video> para que o mesmo funcione no firefox. Ele me mostrou uma forma utilizando PHP mas infelizmente não consegui obter o codigo.
Os servidores web, quando servem um arquivo, enviam ao navegador a informação de tipo de conteúdo. O header enviado do servidor, para um arquivo Ogg Vorbis, deve ser:
Content-type: application/ogg
Se o servidor não enviar esse header, o vídeo não vai tocar no Firefox. O Apache sabe fazer sozinho, basta que esteja configurado para isso. No Ubuntu, por exemplo, ele já vem configurado para servir ogg.
A saída de scripts PHP é servida com outro tipo de conteúdo. Geralmente “text/html”. Se você serve seu vídeo do PHP, precisa enviar um header no início do script avisando o navegador que esse conteúdo é vídeo. Você pode fazer:
<?php
header('Content-type: application/ogg');
?>
Já se você serve os vídeos como arquivos estáticos, não deve usar PHP para processá-los só para que sejam servidor com o tipo correto. O jeito certo é configurar corretamente o servidor. Se for um hosting compartilhado, eu tentaria um chamado ao suporte pedindo para que configurem isso corretamente antes de fazer com PHP. Ou estudaria mudar de hosting
Durante esta semana estive no escritório do W3C Brasil, ministrando um treinamento de HTML5. Para encerrar o treinamento, o W3C organizou uma edição do Café com Browser. Nós e o pessoal da Agência Click vamos mostrar um pouco do que já estamos fazendo com HTML5, e você pode assistir ao streaming ao vivo, cujo link [...] mais...
Durante esta semana estive no escritório do W3C Brasil, ministrando um treinamento de HTML5. Para encerrar o treinamento, o W3C organizou uma edição do Café com Browser.
Nós e o pessoal da Agência Click vamos mostrar um pouco do que já estamos fazendo com HTML5, e você pode assistir ao streaming ao vivo, cujo link será disponibilizado na hora.
Para tuitar, use a tag #cafecombrowser.
O vídeo possui duas ferramentas fantásticas para a conversão de vídeo: ffmpeg e mencoder. Mas são ferramentas de linha de comando e nada fáceis de usar. Veja, por exemplo, como ripar DVDs para DivX com mencoder. Se a origem, ao invés de um DVD, for um arquivo mpeg, isso tudo muda bastante. Se a saída, [...] mais...
O vídeo possui duas ferramentas fantásticas para a conversão de vídeo: ffmpeg e mencoder. Mas são ferramentas de linha de comando e nada fáceis de usar. Veja, por exemplo, como ripar DVDs para DivX com mencoder. Se a origem, ao invés de um DVD, for um arquivo mpeg, isso tudo muda bastante. Se a saída, ao invés de DivX, for mp4, muda bastante também.
Conheci recentemente o Transmageddon, ferramenta fantástica. Veja um screenshot:
Se você clica em “Pré-definições”, por exemplo, veja a lista que aparece:
Serve para quase tudo o que você pode querer fazer convertendo vídeo. Sem dor. Vale a pena experimentar.
Embora seu computador possa ter dois, quatro, oito ou até dezesseis núcleos de processamento, o Python só usa um deles de cada vez (mesmo trabalhando com threads). Parallel Python resolve o problema. Um exemplo simples, para você entender como funciona: ppserver = pp.Server(ppservers=()) job1 = ppserver.submit(funcao_demorada, (), (), ()) job2 = ppserver.submit(funcao_demorada, (), (), ()) [...] mais...
Embora seu computador possa ter dois, quatro, oito ou até dezesseis núcleos de processamento, o Python só usa um deles de cada vez (mesmo trabalhando com threads). Parallel Python resolve o problema. Um exemplo simples, para você entender como funciona:
ppserver = pp.Server(ppservers=())
job1 = ppserver.submit(funcao_demorada, (), (), ())
job2 = ppserver.submit(funcao_demorada, (), (), ())
print job1()+job2()
Os quatro argumentos do método submit são: a função que será executada, os argumentos passados a ela, as funções que ele pode chamar e os módulos dos quais ela depende. Veja um exemplo de como chamar com esses parâmetros:
ppserver = pp.Server(ppservers=())
job1 = ppserver.submit(funcao_demorada, (44,),
(sub_funcao,), ("sys","math",))
job2 = ppserver.submit(funcao_demorada, (25,),
(sub_funcao,), ("sys","math",))
print job1()+job2()
Divirta-se!
Fiz essa versão do clássico joguinho Lights Off: O jogo é simples, e o objetivo é apenas apagar todas as luzes. Por curiosidade, fiz também o algoritmo que resolve o jogo: O desafio está lançado. O primeiro que colocar nos comentários a URL de uma página com um botão “solve” como o meu ganha uma [...] mais...
Fiz essa versão do clássico joguinho Lights Off:
O jogo é simples, e o objetivo é apenas apagar todas as luzes. Por curiosidade, fiz também o algoritmo que resolve o jogo:
O desafio está lançado. O primeiro que colocar nos comentários a URL de uma página com um botão “solve” como o meu ganha uma entrada para o Codeshow. Importante:
Vale o primeiro comentário. Mesmo que você comente de madrugada e eu demore a moderar, ganha quem comentar primeiro.
O solucionador tem que ser escrito em Javascript. Você pode copiar minha versão do jogo e desenvolver em cima dela.
Não pode resolver na base da tentativa e erro. Tem que ser uma boa solução, que resolva qualquer estado do tabuleiro em 20 passos ou menos.
Divirtam-se!
(O pessoal da Visie, se quiser participar, pode. Só não vai ganhar nada )
Há um tempo eu ensinei aqui como fazer o Mac falar. O Linux também faz. Instala aí: $ sudo apt-get install espeak Daí é só mandar: $ espeak "Luke, I am your father." E fala português também: $ espeak -v pt "Luke, eu sou seu pai." Com -f arquivo.txt, ele lê o texto de um [...] mais...
Há um tempo eu ensinei aqui como fazer o Mac falar. O Linux também faz. Instala aí:
$ sudo apt-get install espeak
Daí é só mandar:
$ espeak "Luke, I am your father."
E fala português também:
$ espeak -v pt "Luke, eu sou seu pai."
Com -f arquivo.txt, ele lê o texto de um arquivo. Com -w arquivo.wav, ele salva o áudio num arquivo. E pode ser comandado via ssh.
Consegue imaginar utilidades para isso?
Navegando por aí, acabei esbarrando no blog do meu amigo Marcos Rossow (nossa, quanto tempo!) E encontrei esse post: JavaScript UTF-8 Decode, com um código tirado daqui: JavaScript utf8_decode. Tem duas coisas que me incomodam nessa abordagem. A primeira é essa mania que muita gente tem, particularmente programadores PHP, de tratar UTF-8 como um “código [...] mais...
Navegando por aí, acabei esbarrando no blog do meu amigo Marcos Rossow (nossa, quanto tempo!)
E encontrei esse post: JavaScript UTF-8 Decode, com um código tirado daqui: JavaScript utf8_decode.
Tem duas coisas que me incomodam nessa abordagem. A primeira é essa mania que muita gente tem, particularmente programadores PHP, de tratar UTF-8 como um “código alienígena” e ISO-8859-1 como normal e padrão. Alô, ISO-8859-1 é usado por parte do mundo. Não dá para escrever hebraico, mandarim, japonês, árabe ou russo com isso. ISO-8859-1 é uma das diversas tabelas de caracteres que existem mundo afora. E Unicode é a única maneira sensata de escrever um sistema que possa ser usado aqui e na China.
A segunda coisa que me incomoda é a quantidade de código. Não testei profundamente, mas tenho a impressão de que o código abaixo resolve o problema:
function utf8_decode(t){
return decodeURIComponent(escape(t))
}
Trecho de código legado (ASP) que pegamos aqui: if len(request("price")) = 3 then valorTotal = left(request("price"),1) elseif len(request("price")) = 4 then valorTotal = left(request("price"),2) elseif len(request("price")) = 5 then valorTotal = left(request("price"),3) end if Jênio. mais...
Trecho de código legado (ASP) que pegamos aqui:
if len(request("price")) = 3 then
valorTotal = left(request("price"),1)
elseif len(request("price")) = 4 then
valorTotal = left(request("price"),2)
elseif len(request("price")) = 5 then
valorTotal = left(request("price"),3)
end if
Jênio.
Criei agora um pequeno script para resolver um problema meu, um exportador de base de dados MySQL para arquivos CSV. Resolvi compartilhar: MySQL2CSV Para baixar, você vai precisar do git. No Ubuntu, para instalar, faça: $ sudo apt-get install git-core Depois, para baixar: $ git clone git@github.com:elcio/mysql2csv.git Isso vai criar a pasta mysql2csv, com o [...] mais...
Criei agora um pequeno script para resolver um problema meu, um exportador de base de dados MySQL para arquivos CSV. Resolvi compartilhar:
MySQL2CSV
Para baixar, você vai precisar do git. No Ubuntu, para instalar, faça:
$ sudo apt-get install git-core
Depois, para baixar:
$ git clone git@github.com:elcio/mysql2csv.git
Isso vai criar a pasta mysql2csv, com o script dentro. Você pode copiá-lo para a pasta /usr/local/bin/ e dar permissão de execução se for usar com muita freqüência:
$ cd mysql2csv
$ sudo cp mysql2csv.py /usr/local/bin/mysql2csv
$ sudo chmod +x /usr/local/bin/mysql2csv
Se fizer isso, vai poder chamar, em qualquer diretório:
$ mysql2csv host user passwd dbname