Tiago Madeira Inferências aleatórias de um cérebro em versão alpha

"Só se dedicará a um assunto com toda a seriedade alguém que esteja envolvido de modo imediato e que se ocupe dele com amor. É sempre de tais pessoas, e não dos assalariados, que vêm as grandes descobertas."
(Arthur Schopenhauer)

Arquivo do mês: November, 2007

30/11/2007

eRuby na Dreamhost

Depois de várias tentativas sem sucesso, enfim consegui rodar o eruby na Dreamhost. A solução foi compilar o source no servidor (via SSH), copiar o binário eruby para eruby.cgi dentro da pasta do domínio e escrever:

DirectoryIndex index.rhtml index.html index.htm
AddHandler rubypage .rhtml
Action rubypage /eruby.cgi

... no .htaccess na raiz do domínio.

A confusão aconteceu por causa de algum defeito no /usr/bin/eruby padrão da Dreamhost. Agora o servidor já está erubyado. :)

Technorati Tags: , , , , , ,

Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais

Um comentário...

29/11/2007

Utilizando Ruby, ruby-dbus e librmpd para exibir “o que estou ouvindo” no Pidgin (Gaim)

Ok, acho que vocês já devem ter percebido que virou moda desde que ressucitei este blog usar uns títulos enormes cheios de nomes estranhos e só falar de Ruby. Bem... a descoberta de uma linguagem nova e seu estudo são sempre fascinantes, ainda mais com algo maravilhoso como o Ruby... é apaixonante. :)

Pra começo de conversa, esse post se propõe a criar um programa em Ruby que mostre a música que você está ouvindo no MPD (Music Player Daemon) no Pidgin. Não sei se a situação é comum, mas é a minha situação e não tinha encontrado outra solução antes, o que me levou a criar um script rubyano.

Para falar com o Pidgin, precisaremos de DBus. DBus é uma maneira inovadora de fazer dois ou mais programas se comunicarem. O HAL (Hardware Abstraction Layer - você provavelmente usa ele e não sabe) usa para fazer aquelas mágicas de montagem e desmontagem automáticas nas distribuições mais novas (inclusive no Slackware 12, e o Slackware tem fama de malvadão) e o Pidgin (nova versão do Gaim) também, para fazer quase tudo. Para acessar o DBus a partir do Ruby, usamos o ruby-dbus. É um projeto em desenvolvimento, que tem alguns bugs, mas nesse caso funciona como esperado.

Para falar com o MPD, precisaremos da libr(uby)mpd. É uma biblioteca extremamente simples de usar e vale a pena ler o código de sua classe pra descobrir suas várias funções e também conferir seus exemplos.

Instaladas essas duas coisas, lá vamos nós:

#!/usr/bin/ruby
 
# MPD2Pidgin (por Tiago Madeira em 29/11/2007)
# http://tiagomadeira.net/mpd2pidgin
#
# (cc) http://creativecommons.org/licenses/by-nc-sa/2.5/
 
require "dbus"
require "rubygems"
require "librmpd"
 
class Pidgin2MPD
	def initialize
		@b=DBus::SessionBus.instance
		@s=@b.service("im.pidgin.purple.PurpleService")
		@o=@s.object("/im/pidgin/purple/PurpleObject")
		@o.introspect
		@i=@o["im.pidgin.purple.PurpleInterface"]
	end
 
	def change(msg)
		status=@i.PurpleSavedstatusFind("MPD2Pidgin").to_s.to_i
		if status==0
			@i.PurpleSavedstatusNew("MPD2Pidgin", 2)
			status=@i.PurpleSavedstatusFind("MPD2Pidgin").to_s.to_i
		end
		@i.PurpleSavedstatusSetMessage(status, msg)
		@i.PurpleSavedstatusActivate(status)
	end
end
 
class MPD2Pidgin
	def initialize(host="localhost", port="6600")
		@host,@port=host,port
		@mpd=MPD.new @host, @port
		@mpd.register_callback(self.method('callback'), MPD::CURRENT_SONG_CALLBACK)
	end
 
	def start
		@mpd.connect true
		puts "Ctrl+D para fechar"
		t=Thread.new do
			readlines
			self.stop
		end
		t.join
	end
 
	def stop
		@mpd.disconnect
	end
 
	def callback(c)
		@current=c
		msg="♫ #{@current.title} - #{@current.artist}" # Personalize essa linha, é divertido.
		if !@pidgin
			@pidgin=Pidgin2MPD.new
		end
		@pidgin.change msg
	end
end
 
mpd=MPD2Pidgin.new # "127.0.0.1", "6600" # os argumentos são host e porta, para quem precisar
mpd.start

Download: mpd2pidgin.rb

Screenshot: MPD2Pidgin (screenshot)

Não é brilhante? Só mandar rodar (salve em /usr/bin/mpd2pidgin pra facilitar) e ele mantém sua mensagem de exibição atualizada em todos os protocolos do Pidgin simultaneamente sem nenhum esforço. Qualquer dúvida, comentem.

Technorati Tags: , , , , , , , , ,

Compare Preços de: iPod, home theater, plasma, lcd, câmeras digitais, games, ps3

2 comentários

29/11/2007

eruby.cgi não funciona na Dreamhost?

Eu fiz absolutamente tudo que a wiki sugeria, mas não obtive sucesso tentando rodar o eruby no tiagomadeira.com (futuro site, que espero que seja em Ruby - e não quero Rails - pra separar um pouco currículo/portifólio e blog)

O log diz que o Internal server error é simplesmente um:

Premature end of script headers: eruby.cgi

Encontrei esse erro na documentação do Apache como sendo porque o Eruby não mandou corretamente os headers. Será que há alguma forma de contornar isso? O suporte da Dreamhost não soube me informar, disse que quem escreveu na wiki foi outro usuário e sugeriu que eu testasse o ERB.

Eu queria o Eruby porque o "Why eruby.cgi?" do eruby.info me convenceu:

Of the choices the eruby CGI is the fast and most independant implementation of eRuby. Though erubis is slightly faster it does not use plain text files but sends the eRuby file to a .rb file for processing. ERB is three times slower than eruby.cgi. The eruby.cgi is by far the best alternative for those that want to get the power of Ruby but use it as simply as they would PHP or ASP scripting. By far the easiest method of running Ruby code on a web page.

Agora, resignado, a não ser que venha uma luz, vou ter que tentar o ERB mesmo...

Technorati Tags: , , , ,

Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais

Um comentário...

Assine via RSS

Assine gratuitamente o meu blog e receba todas as atualizações na hora, em seu agregador de feeds favorito.

Seja o 231º assinante

Busca no blog

Escreva palavras-chave para buscar e clique em Pesquisar.

Busca Google

Blogs de minha autoria

Publicidade

Dreamhost

Creative Commons - Some rights reserved tiagomadeira.net © Todo o conteúdo deste blog, exceto quando especificado o contrário, está licenciado sob uma Licença Creative Commons por Tiago Madeira. Os comentários são de responsabilidade de seus respectivos autores.