sábado, 22 de março de 2008

Codificação em nome de arquivo: mostrando o Python

Já que estou me quebrando com as músicas, deixe-me apresentar uma solução praquelas que o Exaile (meu player) não consegue ler por causa da codificação.

Como antes eu tinha tudo no Windows, quando copiei-as pro Linux, não percebi que a codificação do nome dos arquivos ficou em ISO8859-1. Como o Linux (e o Python - o Exaile é escrito em Python) usam UTF-8 como padrão, todas as que estão com acentos não são lidas...

A solução é um script Python (quem causou o problema que o resolva!). Ele pega todos os arquivos, checa se é UTF-8 e, se não for, decodifica e codifica de novo. Aqui está:
import os

def decode_all_in_dir(dir, from_cod='iso8859-1', to_cod='utf8'):
for arq in os.listdir(dir):
path = os.path.join(dir, arq);
if (os.path.isdir(path)):
decode_all_in_dir(path)
try:
arq.decode(to_cod)
except:
new_name = arq.decode(from_cod).encode(to_cod)
os.rename(os.path.join(dir, arq), os.path.join(dir, new_name))
print new_name

if __name__ == '__main__':
decode_all_in_dir('.')
Renomeou todos os arquivos, listando os que ele renomeou. Se rodar de novo, nenhum deve ser listado. Pronto, codificações corrigidas!

PulseAudio - P2

Tive alguns problemas com o PulseAudio. Ele parece não gostar muito de Legião Urbana. O processo do PulseAudio morre depois de um tempo...

Pra resolver isso, fiz uma gambiarra: criei um script que re-inicia cada vez que o processo morre. Em C. O código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#define true 1
#define false 0

int main()
{
while (true) {
system("c:\\pulseaudio\\pulseaudio.exe -D");
Sleep(10000);
}
return 0;
}
Compilei e coloquei no lugar da chamada do PulseAudio, mas, por enquanto, nem precisou chamar uma segunda vez...


Ah, compilei com o Code::Blocks no Windows XP da máquina virtual do primeiro post. Na verdade, usando o kvm, mas isso é assunto pra outro post.

-----
Mais um: funcionou melhor quando criei um atalho em "%systemroot%\system32\GroupPolicy\Machine\Scripts" apontando para o executável, e apontanto para esse atalho no "gpedit.msc".

PulseAudio

Testei hoje, entre a noite de sexta-feira santa e a madrugada do sábado de aleluia um cara chamado PulseAudio (http://www.pulseaudio.org/).

Ele é um servidor de som. Meu problema é que compartilho o computador aqui em casa. O MS Windows XP que minha irmã usa está ligado no aparelho de som. Fui intimado a retirar todas minhas músicas e meus filmes dali, pois minha irmã precisa "fazer os trabalhos dela e não está conseguindo". Eu sei que não é esse o problema, mas eu preciso provar isso. Meu notebook, com Linux (Debian), está com cópia das minhas músicas.

Quero ouvir as músicas do notebook no aparelho de som ligado no Windows. Entra em cena o PulseAudio.

Em http://www.cendio.com/pulseaudio, fiz o download dos binários pra Windows e decompactei em C:\pulseaudio e executei:
pulseaudio.exe
Deu pau. É preciso criar um arquivo, chamado "default.pa". O meu ficou com o conteúdo:
load-module module-esound-protocol-tcp auth-anonymous=1
load-module module-native-protocol-tcp auth-anonymous=1
load-module module-cli
load-module module-waveout
.nofail
Executei de novo, e foi...

No Linux, instalei:
aptitude install pulseaudio
aptitude install padevchooser
E executei (no Linux) com meu usuário:
padevchooser
Ele criou um ícone no "system tray", clica nele com o direito, "Default Server" -> "Other" e coloca o nome do servidor Windows.

Pronto, é isso. O PulseAudio ainda apresenta uns bugs no Windows, mas promete...

Pra deixar melhor, no windows, pode-se deixá-lo iniciando automaticamente, sem precisar nem mesmo logar com algum usuário. Vá em "Iniciar" -> "Executar" e digite "gpedit.msc". Na janela que se abre, escolha na árvore "Configuração do Computador" -> "Configurações do Windows" -> "Scripts". Clique com o direito do mouse em "Inicializar" -> "Propriedades". Adicione uma nova entrada para o PulseAudio. Use o caminho completo e "-D" como parâmetro.

quinta-feira, 20 de março de 2008

GMail html only

Alguém mais tem problemas com o Ajax no GMail além de mim? Até agora, sou o único que eu conheço que acha o GMail pesado...

Mas, como pra tudo dá-se um jeito, vai a dica:

http://gmail.google.com/gmail/h/

Assim, vai diretamente para o acesso HTML do GMail, sem todo o "peso" do Ajax...

Funciona, pode acreditar!

quarta-feira, 19 de março de 2008

Formato de data no Oracle

Pra quem não sabe, trabalho com Oracle durante o horário comercial.

Deixo uma dica, pra formatar datas com strings no meio, algo do tipo:
19/03/2008 às 16h02min
No Mysql, seria barbada, pois ele usa o "%" na frente das expressões especiais para o formato de data. Já o Oracle...

Mas pra tudo dá-se um jeito:
select TO_CHAR(sysdate, 'DD/MM/YYYY "às" HH24"h"MI"min"') from dual
O segredo está nas ". O que colocar ali no meio, o Oracle coloca como texto.

Simples, mas até descobrir...

Outra dica, já na onda do Oracle, é um lugar pra pesquisar essas e outras coisas:

http://tahiti.oracle.com

segunda-feira, 25 de fevereiro de 2008

Ogg -> Mp3 -> Ogg

Para converter OGG em MP3 usando a linha de comando:
oggdec -o - ~/rodolfo/Música/Skank\ -\ Dois\ Rios\[1\].ogg | lame -h -V 4 --vbr-new - saida.mp3
Um pouco mais devagar agora:
oggdec -o - ~/rodolfo/Música/Skank\ -\ Dois\ Rios\[1\].ogg
Esse comando decodifica o arquivo Ogg em WAVE. Se quiser simplesmente o WAVE, é só direcionar a saída desse comando para um arquivo.
lame -h -V 4 --vbr-new - saida.mp3
Esse comando pega o arquivo WAVE e codifica em MP3 (tem um espaço entre "-" e "saida.mp3"... maldita fonte!).

Copiado descaradamente de: http://liquidat.wordpress.com/2007/12/03/short-tip-convert-ogg-file-to-mp3/

Agora, pensando assim, pode-se converter inúmeros formatos de áudio (quem sabe até de vídeo, mas não testei).

Convertendo de MP3 para Ogg:
mp3-decoder -w - Skank\ -\ Dois\ Rios.mp3 | oggenc - -o Skank\ -\ Dois\ Rios.ogg
Nessas conversões, há perda de qualidade (tanto por parte do MP3 quanto do Ogg).
Mais informações sobre qualidade da codificação, RTFM (leia o manual)...

Um comparativo:
- arquivo original, em OGG: 3,8MB (3928560 bytes)
- arquivo MP3, a partir do OGG: 4,9MB (5053643 bytes)
- arquivo WAVE, a partir do OGG: 48MB (49600556 bytes)
- arquivo OGG, a partir do MP3: 3,8MB (3887563 bytes)

SSH + X11Forwarding

Para configurar X11Forwarding no servidor ssh, altere o arquivo /etc/ssh/sshd_config, adicionando ou editando a linha:
X11Forwarding yes
No cliente ssh também é necessária uma configuração. No arquivo /etc/ssh/ssh_config, a linha:
ForwardX11 yes

Feito isso, reinicie o servidor ssh.
É só conectar e chamar aplicações gráficas do servidor. Elas serão executadas no servidor, mas a "tela" será a do cliente. Tudo através do ssh.