Faça streaming de músicas do seu PC, usando o Zeya!

O Zeya é um servidor que distribui as músicas do seu PC para qualquer dispositivo que rode um navegador compatível com HTML 5. Não precisa ter JavaScript nem Flash.
Esta é a maneira mais rápida de instalar um media center no seu PC que, além de tudo, é muito leve.
Se você usa Ubuntu, ou outra distro Linux e tem um celular ou smartphone que acessa a rede local, (quase) tudo é possível, aqui.
zeya media center e opera

Como instalar o Zeya

No Ubuntu, abra um terminal e forneça o comando

sudo apt-get install zeya

No Fedora ou SuSE:

yum install zeya

Aguarde o processo de instalação, que pode demorar um pouco, a depender da sua conexão.

Como iniciar o Zeya

Ao iniciar o Zeya, você vai informar o diretório (ou o nome da pasta) em que se encontram os seus arquivos de música. No meu caso, eles ficam dentro de /home/mp3/. Adapte o comando que segue à sua realidade:

zeya --path /home/mp3/

Se você não estiver usando o Ubuntu, use o comando acima da seguinte forma:

zeya.py --path /home/mp3/

O Zeya pode levar algum tempo para ler o seu diretório de músicas, na primeira vez – especialmente se você tiver muitos arquivos lá dentro.

Ouça o streaming de músicas no seu celular

Ótimo! O Zeya já está instalado e funcionando. Só falta ouvir as músicas.
Abra um navegador, no seu celular ou em outro computador que esteja conectado à rede e, na barra de endereço, forneça o endereço IP do computador em que o Zeya está rodando, seguido da porta 8080.
Caso você não saiba o IP do computador, clique aqui para aprender como determinar o endereço IP do seu computador no Ubuntu.
No meu caso, fica assim:
Zeya music browser

Compatibilidade

Do lado do servidor Zeya Media Center, foi descrito o processo de instalação em uma máquina, rodando Ubuntu 10.04 LTS – também foi testado no Ubuntu 13.10 e funcionou bem. Portanto, o Zeya deve funcionar em qualquer outra versão do Ubuntu ou de qualquer outro sistema operacional baseado no Linux.
O Zeya não usa Flash ou JavaScript. O navegador cliente – aquele que vai acessar os arquivos do servidor – deve ser compatível com o HTML 5.
No meu caso, funcionou bem com o navegador Opera.
Entre os problemas conhecidos está a latência (demora) entre o momento em que você clica em uma música e quando ela começa a tocar. Tenha um pouco de paciência, neste ponto.
Screenshot do smartphone:
Zeya media center and opera

Pondo o Zeya na inicialização do sistema

Para rodar o Zeya automaticamente na inicialização, faça o seguinte:

  • copie o arquivo /etc/zeya.conf para /etc/init/zeya.conf
    cp /etc/zeya.conf /etc/init/zeya.conf

    Ajuste as últimas linhas do arquivo /etc/init/zeya.conf de acordo com os seus desejos. Veja um expemplo:

    exec python /usr/bin/zeya --path=/var/music --port=8080

    Se você não encontrar o arquivo zeya.conf, crie um no diretório /etc/init/ com o nome zeya.conf com o seguinte conteúdo:

    # Start zeya
    #
    description     "Start Zeya music server"
    start on startup
    task
    exec python /usr/share/zeya/zeya.py --path=/home/mp3
    SAIBA MAIS:

    Execução local

    Localmente, na mesma máquina em que o Zeya está instalado, não é preciso abrir um “navegador inteiro” apenas para reproduzir as músicas. Há um cliente, em modo texto, feito em Python, que vem no pacote.
    Ele pode ser executado assim:

    python /usr/share/zeya/zeyaclient.py http://localhost:9000

    Assim que for iniciado, o zeyaclient.py vai te pedir uma query. Se você digitar woman, ele vai buscar, na sua coleção, músicas que tenham contenham esta palavra – em seus nomes, nas tags ID3, etc. Experimente.
    Zeya media center - cliente zeyaclient.py
    Isto deve ser o suficiente.
    Eu espero que você e todos os seus amigos tenham muitas horas de diversão com suas músicas preferidas!

Como saber o meu endereço IP no Ubuntu, dentro da minha rede local.

É possível descobrir o seu endereço IP de várias formas. As que eu mais uso são as seguintes:

Pelo gerenciador de redes

Normalmente, na barra de status, à esquerda, há um pequeno ícone que indica o estado da conexão. É possível conectar ou desconectar-se da rede. O seu formato varia de acordo com o tema que você estiver usando.

Ao clicar nele, com o botão direito do mouse, é possível ver uma lista de opções.

Lista de opções do gerenciador de redes

Selecione “Informações da conexão” e aguarde a abertura da janela de informações.

A 6a. linha mostra o seu Endereço IP.

Na linha de comando

Abra um terminal e entre o comando:
ifconfig
Semelhante ao comando ipconfig no Windows, ele fornece informações sobre as suas conexões, no console. No caso, aqui, a rede usada é Wi-Fi. Portanto, a informação desejada se encontra na seção wlan0. Adapte esta informação ao seu caso.

Ubuntu 12.04 Beta

Ubuntu 12.04 LTS Precise PangolinEu reluto um pouco em postar algo sobre o assunto, uma vez que a tendência é que este post se torne defasado em poucas semanas. O principal objetivo deste blog não é dar notícias ou “contar novidades”. Mas, vamos lá… 🙂

Softwares distribuídos em versão Beta, são softwares para testes. Portanto, NÃO O INSTALE no seu PC de trabalho.

Embora a versão 12.04 seja um LTS (Long Time Support), ou seja, uma versão que deverá priorizar a estabilidade em detrimento dos avanços, além de ser voltada aos usuários que desejam permanecer sem alterar o sistema operacional por um tempo maior (5 anos).

A versão final, prevista para 26 de Abril, roda sobre um kernel Linux v3.2.6 e virá com o LibreOffice v3.5.
O player de músicas padrão é o Rhythmbox. Na área de trabalho, o Unity 5.2 traz mais facilidade de personalização, através do painel de configuração do sistema – na seção “Aparência”.

Previna-se de ataques SQL Injection

Este artigo explica o básico do SQL Injection (Injeção de SQL), com um exemplo que mostra como ele se dá e provê métodos de prevenção a estes ataques.
Tal como o nome sugere, este ataque pode ser feito através de queries SQL. Muitos programadores não têm idéia de como um agressor pode usar uma query. Basicamente, um SQL Injection pode ser feito em uma aplicação web que não efetue a filtragem apropriada dos dados fornecidos pelos usuários, confiando em tudo que ele digita – o que pode ser uma requisição SQL não prevista pelo idealizador do software.
Os exemplos mencionados aqui foram testados com os seguintes softwares:

  • PHP 5.3.3-7
  • Apache/2.2.16
  • Postgresql 8.4

Ainda que você não esteja fazendo uso de qualquer um deles (claro que MySQL está incluído), os conceitos se aplicam a qualquer situação que envolva um website com formulários a ser preenchidos pelos visitantes e que dão acesso ao banco de dados.

Um exemplo de SQL Injection

Vamos começar pelo fato de que muitas aplicações web têm uma página de autenticação. Vamos usar o código seguinte, como um exemplo:

index.html

<html>
<head><title>SQL Injection Demo</title></head>
<body onload="document.getElementById('user_name').focus();" >
<form name="login_form" id="login_form" method="post" action="login.php">
<table border=0 align="center" >
<tr>
<td colspan=5 align="center" ><font face="Century Schoolbook L" > Login Page </font></td>
</tr>
<tr>
<td> User Name:</td><td> <input type="text" size="13" id="user_name" name="user_name" value=""></td>
</tr>
<tr>
<td> Password: </td><td> <input type="password" size="13" id="pass_word" name="pass_word" value=""></td>
</tr>
<tr>
<td colspan=2 align="center"><input type="submit" value="Login"> </div></td>
</tr>
</table>
</form>
</body>
</html>

Ao fornecer o nome de usuário (user_name) e senha (pass_word), seus valores são postados em login.php via HTTP_POST.

login.php

<?php
$Host= '192.168.1.8';
$Dbname= 'john';
$User= 'john';
$Password= 'xxx';
$Schema = 'test';

$Conection_string="host=$Host dbname=$Dbname user=$User password=$Password";

/* Conecta ao banco de dados e pede uma nova conexão*/
$Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW);

/* Erro ao verificar a string de conexao */
if (!$Connect) {
echo "Falha ao conectar ao banco de dados";
exit;
}

$query="SELECT * from $Schema.users where user_name='".$_POST['user_name']."' and password='".$_POST['pass_word']."';";

$result=pg_query($Connect,$query);
$rows = pg_num_rows($result);
if ($rows) {
echo "Sucesso ao logar!";
}
else {
echo "Não foi possivel logar.";
}
?>

Pois bem. A linha 19, no código acima, é vulnerável a uma ataque (me refiro à linha que começa com $query="SELECT *). Trata-se de uma requisição cujo objetivo é encontrar no banco de dados o nome e a senha fornecidos pelo usuário. Tudo vai funcionar bem se forem fornecidos dados corretos e válidos. Contudo, um usuário malicioso pode fornecer outro tipo de informação ao sistema.
No campo nome do usuário, em vez de digitar o que se espera, ele pode digitar o seguinte:

' or 1=1;--

e deixar o campo senha em branco.
Ao clicar em submit, as informações serão postadas em login.php, onde a requisição será vista como:

SELECT * from test.members where user_name='' or '=';--' and password='';

O que se vê acima é uma requisição SQL plenamente válida. No postgresql o -- é um indicador de início de um comentário, ou seja, tudo o que vier depois deste caractere será ignorado. O que será executado é o seguinte:

select * from test.members where user_name='' or '=';

o que será verdadeiro (true) e retornará a mensagem “Login Success”.
Caso o agressor conheça os nomes das tabelas contidas no banco de dados, ele poderá apagar as tabelas com a seguinte entrada, no campo nome do usuário:

';drop table test.lop;--

Alguns scripts de autenticação tendem a agir da seguinte forma:

  • Guardar as senhas no formato md5.
  • Selecionar primeiro o nome,senha no banco de dados, com base no que foi fornecido pelo digitador.
  • Formatar em md5 a senha fornecida e compará-la com a senha no banco.
  • caso sejam iguais, a autenticação segue adiante.

Vejamos como contornar isto, no caso de a query ser vulnerável a um SQL-Injection.

login.php

<?php
$Host= '192.168.1.8';
$Dbname= 'john';
$User= 'john';
$Password= 'xxx';
$Schema = 'test';

$Conection_string="host=$Host dbname=$Dbname user=$User password=$Password";

/* Conecta ao banco de dados e pede nova conexão */
$Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW);

/* Erro ao verificar a string de conexao */
if (!$Connect) {
echo "Falha ao conectar ao banco de dados";
exit;
}

$query="SELECT * from $Schema.users where user_name='".$_POST['user_name']."' and password='".$_POST['pass_word']."';";

$result=pg_query($Connect,$query);
$rows = pg_num_rows($result);
if ($rows) {
echo "Sucesso ao logar!";
}
else {
echo "Erro ao logar.";
}
?>

Agora digite o seguinte no campo nome de usuário:

' UNION ALL SELECT 'laksh','202cb962ac59075b964b07152d234b70

em seguida, entre “123” no campo senha e clique em submit, sabendo que md5(123) é igual a 202cb962ac59075b964b07152d234b70.
Agora, a query vai se expandir para

SELECT user_name,password from test.members where user_name='' UNION ALL SELECT 'laksh','202cb962ac59075b964b07152d234b70';

e quando for executada, o banco de dados vai retornar ‘laksh‘ como nome de usuário e ‘202cb962ac59075b964b07152d234b70‘ como senha. E, uma vez que postamos “123”, no campo pass_word, o strcmp vai retornar 0 e a autenticação ocorrerá com sucesso.
O que se vê, acima, são algumas das inúmeras possibilidades de ataques SQL Injection. Seguem, abaixo, algumas coisas que podem ser feitas para reduzir as possibilidades de ataques:

  • Sempre verificar o que é digitado (nunca confie no que o usuário vai digitar);
  • Se você espera que se digite um nome de usuário em um determinado campo, certifique-se de que ele contenha apenas caracteres alfanuméricos;
  • Elimine ou filtre caracteres especiais e entradas possivelmente maliciosas dos usuários;
  • Use expressões preparadas para executar as requisições;
  • Não permita que várias requisições sejam feitas em uma única expressão;
  • Não deixe vazar informações sobre o banco de dados através das mensagens de erro, etc…

Esta é uma tradução livre do artigo original, de Lakshmanah Ganapathy, que pode ser encontrado http://miud.in/1aYd

Ubuntu — Atalhos de teclado

As teclas de atalho são a maneira mais produtiva de se comunicar com a interface gráfica Unity, no Ubuntu.
O Unity foi pensado para ser um ambiente desktop mais eficiente e você pode aumentar exponencialmente a sua produtividade com o uso mais intensivo das teclas de atalho — uma vez que elas dispensam você da “ginástica” de movimentar constantemente as mãos entre o teclado e o mouse.
Uma forma de ver rapidamente as teclas de atalho é manter a tecla Super pressionada por 3 segundos — uma tabela será exibida na tela.
Veja a lista de atalhos do Unity:

  1. Alt + F4 — Fecha a janela atual (Eu sei, esta você já sabia…)
  2. Alt + F2 — Abre uma caixinha de texto para você executar um comando
  3. Alt + Tab — Alterna entre as janelas dos aplicativos abertos
  4. Alt + Shift + Tab — Alterna entre as janelas – só que em ordem reversa
  5. Alt + tab +  (seta à direita) — Alterna para a próxima janela à direita
  6. Alt + tab +  (seta à esquerda) — Alterna para a próxima janela à esquerda
  7. Alt + ‘ — Alterna entre as janelas do aplicativo atual
  8. Super + S — Ativa o alternador das áreas de trabalho
  9. Super + W — Exibe todas as janelas abertas dentro da área de trabalho atual
  10. Ctrl + Alt +     — Alterna entre as áreas de trabalho
  11. Ctrl + Alt + Shift +     — Move a janela atual para uma outra área de trabalho (depende da direção da seta que você for usar)
  12. Ctrl + Super + D — Esconde todas as janelas na área de trabalho ativa
  13. Ctrl + Alt + L — Bloqueia (lock) a tela – útil quando for se ausentar para tomar um cafezinho
  14. Ctrl + Alt + Del — Log out – Encerra a sessão
  15. Alt + F7 +     — Move a janela atual
  16. Alt + F8 +     — Redimensiona a janela atual
  17. Ctrl + Alt + T — Abre um terminal
  18. Agora, combine estas teclas com o uso do mouse:

  19. Alt + Botão esquerdo do mouse — Move a janela atual – Arraste o mouse enquanto mantém o botão esquerdo pressionado para movimentar a janela sobre a qual se encontra o ponteiro
  20. Alt + Botão do meio do mouse — Redimensiona a janela atual – Arraste o mouse para redimensionar a janela. Em alguns sistemas funciona com o botão direito do mouse

Atalhos do HUD

O HUD (Heads Up Display), ainda tem mais estes atalhos de teclado:

  • Alt (toque rápido) — Abre o HUD
  • À medida em que você vai digitando… — uma lista de itens relacionada aos termos fornecidos vai aparecendo
  • Setas direcionais — Seleciona entre os resultados
  • Esc (ou Alt) — Termina e sai do HUD

Teclas de atalho do Dash

Estas são as teclas de atalho relativas ao Dash:

  • Super (mantendo pressionada) — Mostra os atalhos de teclado
  • Super (toque rápido) — Abre o Dash
  • Super + A — Exibe a lente (lens) de aplicativos
  • Super + F — Exibe a lente de arquivos
  • Super + M — Exibe a lente de músicas
  • Super + V — Exibe a lente de vídeos
  • Super + C — Exibe a lente de fotos
  • Super + G — Exibe a lente Gwibber
  • Ctrl + Tab — Alterna entre as lentes
  • Ctrl + Shift + Tab — Alterna reversivamente entre as lentes
  • Enter — Abre o item selecionado
  • Clique direito do mouse sobre o item — Exibe uma prévia

O Lançador

Teclas de atalho relativas ao Lançador (Launcher):

  • Alt + F1 — Ativa a navegação por teclado
  • Super + Tab — Alterna entre as aplicações abertas
  • Super + Shift + Tab — Alterna no sentido reverso entre as aplicações abertas
  • Super + (1 a 9) — Seleciona entre as aplicações, por número
  • Super + Shift + (1 a 9) — Abre a aplicação selecionada em nova janela
  • Super + T — Exibe o conteúdo da lixera

Como tirar fotos da tela, no Ubuntu

Mesmo para novatos, tirar fotos da sua tela atual (screenshots) pode ser de grande valia, quando se quer mostrar uma determinada situação para um suporte à distância. Quem escreve manuais, guias, tutoriais também faz uso intenso deste recurso.
Veja como é fácil:

  • Print Screen — Tira a foto da tela
  • Alt + Print Screen — Captura a janela atual
  • Shift + Print Screen — Captura uma área – ou seja, permite ao usuário selecionar uma área da sua tela para ser “fotografada”
  • Ctrl + Print Screen — Captura uma imagem integral da tela e a envia para a área de transferência (clipboard) – você pode inserir a imagem em um outro aplicativo, com suporte a imagens, usando o atalho Ctrl + V
  • Ctrl + Print Screen — Captura a janela atual para a área de transferência
  • Ctrl + Shift + Print Screen — Permite selecionar uma área a ser capturada para a área de transferência