Descobrindo novos serviços D-Bus em Python

Enquanto “brincava” mais um pouco (nunca é demais) com Python e DBus num projeto (a ser descrito em breve…), uma biblioteca monitorava certos serviços que poderiam estar rodando ou não. Para monitorar os que já estavam rodando, tudo bem, já os que não estavam rodando eu tinha que esperar eles inicializarem para adicionar os callbacks necessários (nova conexão, etc…), uma vez que ele reclamava “Could not get owner of name …” sempre que tentasse conectar um callback a um serviço sem rodar.

Então, precisei adicionar um callback para o sinal “NameOwnerChanged” do objeto “org.freedesktop.DBus’ usando Bus.add_signal_receiver(). Sempre que um nome no barramento (bus) mudasse de dono, minha função era chamada com 3 argumentos: Nome que mudou de dono, antigo dono e novo dono (Os dois últimos são strings vazias caso não existam).


self._bus.add_signal_receiver(self.NameOwnerChanged,
    'NameOwnerChanged',
    'org.freedesktop.DBus',
    'org.freedesktop.DBus',
    '/org/freedesktop/DBus')

Fonte: D-Bus Tutorial

Mantendo a proporção em OpenGL

Bem, na última quinta feira foi a data de entrega do SiVOP. Ele está disponível aqui. Para executar, “python Sivop.py arquivo.obj”.

Pouco antes de entregar ainda faltava um requisito essencial, que ao redimensionar a janela o objeto não fosse “deformado”, mantendo a forma e tamanho original. Para isso, tive que ajustar o campo de visão (ângulo de visão vertical) de acordo com a altura da janela, usando senos e cossenos.

Informações iniciais:

  • Altura inicial da janela (h)
  • Ângulo inicial (“Teta”)

Imaginando a câmera como centro de uma esfera, podemos achar a hipotenusa (r) de um triângulo retângulo que tem a altura inicial como cateto oposto do ângulo inicial. Essa hipotenusa seria considerada o raio dessa esfera. Dessa forma, podemos achar o ângulo equivalente para uma nova altura, que seria um novo cateto oposto. Em python (que usei no SiVOP):

  • self.hypo = 400/sin(pi/12) # Angulo de 15 graus e altura inicial de 400
  • gluPerspective(self.calcAngle(), float(w)/h, 0.1, 500.0) # ajusta a câmera

E self.calcAngle():

  • return degrees(asin(self.height/self.hypo))

Classe em Python para interface com o Tomboy via D-BUs

Vendo alguns tutoriais há alguns dias, escrevi uma pequena classe que abstrai os detalhes do DBus, expondo apenas a API do Tomboy.

Exemplo de uso (Tive que colocar os “….” pois o wp.com não estava reconhecendo a indentação):

import tomboy
instance = tomboy.RemoteControl()
for i in instance.list_all_notes():
....print i
....print instance.get_note_title(i)
....print instance.get_note_change_date(i)

Link para tomboy.py
Guia simples para começar a usar o D-Bus em Python (em inglês)

Animação sobre Trusted Computing

Achei nesse fim de semana uma animação sobre Trusted Computing. Segundo a Wikipedia (primeiro parágrafo do artigo):

Trusted Computing (commonly abbreviated TC) is a technology developed and promoted by the Trusted Computing Group (TCG). The term is taken from the field of trusted systems and has a specialized meaning. In this technical sense, “trusted” does not necessarily mean the same as “trustworthy” from a user’s perspective. Rather, “trusted computing” means that the computer can be trusted by its designers and other software writers not to run unauthorized programs.

Ou seja, é computação “confiável” mais para os desenvolvedores do que para os usuários (se bem que a “versão oficial” fala mais do último grupo…).

Link para o torrent (legal e inglês…)

Sivop – Quase lá

Bem, hora de tirar a poeira e teias de aranha daqui…

O SiVOP está quase pronto, só faltando algumas revisões e escrever o documento de entrega. A data final é na próxima quinta (18).