Posts Tagged ‘python’

Atualizado: Tutorial/Dicas: Usando gStreamer, QT4 e Python para criar um player

Olá pessoas, depois de muito tempo sem passar por aqui para postar nada, decidi postar um pequeno tutorial, ou uma série de dicas para que vocês tenham uma ideia de como usar gStreamer, QT4 e Python na criação de um player :)

Primeiro, o porque do uso do QT4? Simples, não gosto muito do GTK, prefiro QT, sou lunatiKo, dá nisso :P

Depois, o porque do gStreamer? gStreamer é mais prático para quem quer criar um player, tá tudo ali, instala meia-duzia de pacotes e teu sistema toca tudo. Além do mais, dá suporte a efeitos e coisas afins. Numa aplicação QT4 pura, é melhor usar só o gStreamer e não o Phonon

Agora vamos deixar de lorota e começar a codar :D

O gStreamer tem toda uma estrutura de Pipelines, sinks e coisas do gênero, mas para um simples player nos não precisamos nos preocupar tanto assim ;) Basta um simples elemento, chamado playbin, o playbin faz o trabalho de criar o decoder, o sink para a saida de som e tudo mais, tudo automaticamente :D

Vejamos um pequeno código (Atenção, faça isso no interpretador python, afinal o gStreamer usa uma Thread para poder tocar tudo, portanto, o seu programa iria sair assim que chegasse no play :P

import gst

player = gst.Pipeline(’player’)

playbin = gst.element_factory_make(’playbin’)

player.add(playbin)

playbin.set_property(’uri’,'file:///home/…/minhamúsica.ogg’)

player.set_state(gst.STATE_PLAYING)

Viram que não é tão dificil não é :)

Agora analisemos o código:

import gst -> Importa o gStreamer

player = gst.Pipeline(’player’) -> Cria a pipeline

playbin = gst.element_factory_make(’playbin’) -> Cria o elemento playbin

player.add(playbin) -> Adiciona o playbin a pipeline do gStreamer

playbin.set_property(’uri’,'file:///home/…/minhamúsica.ogg’) -> Seta a propriedade uri do playbin para a localização do stream, isso pode ser um stream http, um arquivo local e por ai vai

player.set_state(gst.STATE_PLAYING) -> Muda o estado da pipeline, STATE_PLAYING começa a tocar, STATE_NULL para de tocar, STATE_PAUSED pausa o stream

Adivinhem só, se você colocar um stream de vídeo ai, ele vai mostrar o vídeo numa nova janela :D

Agora você se pergunta, como posso saber o fim do stream? Simples eu digo!

Usamos dbus e pygtk

Vejam só o código:

import gst, gtk

def mensagem(bus, message,player):

if message.type == gst.MESSAGE_EOS:

player.set_state(gst.STATE_NULL) # Vai para o stream na mensagem de fim-de-stream

player = gst.Pipeline(’player’)

bus = player.get_bus() # Pega o elemento do DBUS

bus.add_signal_watch() # Adiciona o watch de sinais

bus.enable_sync_message_emission() # Habilita a emissão de mensagens sync

bus.connect(’message’,message,player) #Conecta o sinal e passa como parametro opcional o player.

playbin = gst.element_factory_make(’playbin’)

player.add(playbin)

playbin.set_property(’uri’,'file:///home/…/minhamúsica.ogg’)

player.set_state(gst.STATE_PLAYING)

gtk.main() #Inicia o GTK para que o dbus funcione…

Isso dai já faz o player em si.

Depois desses códigos, vou deixar que vocês pesquisem um pouco :)

Vou dar logo uma dica, usem o QWidget.winId() (no Windows, int(QWidget.winId())), coloquem o gtk.main numa thread com QThread e criem um qt sinal para o “message” e o “sync-message::element”

 

Além disso, tenho um projeto de player aqui: http://svn.kinuxlinux.org/DJ, é chamado de DeeJay, as deps são gstreamer-python, pygtk, pyqt4 :D

Aproveitem

Links:

  • http://doc.trolltech.com
  • http://pygstdocs.berlios.de
  • http://pygtk.org

Posted by Otávio Souza on Julho 21st, 2008 6 Comments

Minha opinião de servidor seguro

Olá pessoas, na falta de tutoriais, decidi fazer esse =)

Como vocês sabem, tenho um home-server, desligado no momento, mas não deixo de ter :P e penei um pouco para poder configura-lo deixando nos conformes e com o máximo de segurança possível, isso tirando é claro o firewall, porque server que é server não tem firewall! (Brincando ;) )

Vamos começar a com as configurações da maquina

  • Processador: Celeron D de 2.13GHz
  • Memória atual (Queimada) : 256MB
  • HD: 20GB
  • 2 placas de rede, uma para o Velox e outra para a rede interna =)
  • e etc. etc. etc.

Serviços que rodam nele

  • Apache+PHP+Python
  • PostgreSQL
  • SQUID-cache
  • SSH
  • Bind (Named) (DNS)

Coisas simples, como podem ver ;)

Agora vem o pequeno detalhe! A distribuição escolhida! Slack sempreeeee!!!

Vamos deixar de lorota e começar a mostrar as configurações

Vamos começar pelo SSH, coisa que acho importantíssimo, afinal não tenho teclado, nem mouse na maquina!

Primeira coisa a se modificar no sshd_config (normalmente /etc/ssh/sshd_config – Configuração do servidor SSH)

PermitRootLogin no (Isso ajuda a não quebrarem logo a senha de root, não se esqueça também de tirar o pacote sudo e/ou desconfigura-lo todo)

PermitLogin no (Porquê isso? Simples! Isso tira o login via senha digitavel, substitua esse tipo de login por login via chaves, é bem melhor!)

Port 22 -> Muda a porta para outra, 256, 897, qualquer número, só para não termos um exploit logo de cara =)

Com isso o servidor SSH já está seguro, dai você se pergunta e como posso logar como root? Orás, “su -”, utiliza um usuário normal para se logar e digita su -, só isso!

Vamos passar para o SQUID, uma coisa que tu tem que pensar, vai permitir o acesso ao SQUID via rede externa?

  • Vai: Então coloca uma ACL para que peça requisição de nome de usuário e senha, isso para que pessoas indesejadas não usem seu SQUID
  • Não: Então só bloqueia tudo mesmo!

Squid é coisa simples mesmo, então deixa ele ai, ele já é chato com o acesso mesmo =P

DNS, edita o /etc/hosts.allow e permite somente o acesso do DNS na rede interna, isso garante que não se exploitem o servidor de DNS!

Apache, se você quer que seu Apache seja só na Intranet, modifica ele e manda fazer Listen para o seu hostname, só isso, caso contrário, faz o cadastro no DynDNS, No-ip, qualquer coisa e manda ele fazer listen para esses hostnames =)

PostgreSQL, libera só o acesso na rede local, se for o caso somente no servidor mesmo, é melhor

PHP: Deixa em safe_mode, usa a opção do safe_mode para liberar o acesso aos arquivos do mesmo grupo, caso contrário, só o mesmo dono pode fazer isso, o que é chato em certos ambientes ¬¬’

Se tu vai usar o servidor de e-mails interno, recomendo deixar o acesso somente na rede local, não exponha tudo a Internet =)

Resumindo: Com um pouquinho de trabalho você pode configurar um servidor até que seguro facilmente :)

Abraços!

Posted by Otávio Souza on Maio 31st, 2008 No Comments

Projeto Candy – Status Atual

Olá pessoas, vocês devem saber do Candy :)

Então, o projeto agora mudou (han? oq? cuma?), é, isso mesmo, ele mudou, depois de muito pensar, achei que não era necessário coloca-lo em C++, que ele poderia ser feito em Python mesmo (claro, tomando cuidado para só usar Python!), por essas e outras, decidi de vez mandar o Candy em Python!

Já criei o módulo no SVN ( http://svn.kinuxlinux.org/pycandy/ ), procuro desenvolvedores interessados em ajudar no projeto ;)

Maiores informações: http://devel.kinuxlinux.org/candy/rascunhos

Posted by Otávio Souza on Maio 29th, 2008 No Comments