Lo busqué en google y siempre encuentro la misma respuesta, "usá dbus, tratá de tomar el nombre, si ya existe, entonces hay una copia corriendo".
Lo que no pude encontrar es un ejemplo que funcione de esto, o al menos no un ejemplo convenientemente etiquetado "así es como se hace una aplicación única usando DBUS y python".
Así que, así es como se hace una aplicación única usando DBUS y python:
Suponiendo que tu aplicación se llama uRSSus (la mía se llama así):
session_bus=dbus.SessionBus()try:session_bus.get_object("org.urssus.service","/uRSSus")# Esta es la segunda copia, hacer que se vea la primera# TODO: implementarexceptdbus.DBusException:# No hay otra copia corriendo# Esto 'toma' el nombre DBUSname=dbus.service.BusName("org.urssus.service",bus=session_bus)# Ahora, empezá la aplicación:window=MainWindow()object=UrssusServer(window,name):::etc,etc
Y eso es todo. No, no es difícil, pero como la documentación de DBUS es... o mejor dicho como la documentación de DBUS no es, cada cosita puede ayudar.
Desde hace un tiempo quiero que tenga soporte de podcasts. El asunto es que ... siempre me pareció mucho trabajo. Seguro, usando phonon puedo crear un reproductor de audio y eso, pero...
Estoy usando un widget HTML para mostrar los posts, así que tendría que encontrar una forma de agregar el reproductor a la interface y... mucho trabajo.
Hoy me desperté y pensé... esperá... El widget HTML de Qt está basado en Webkit. Y webkit soporta HTML5. Y HTML5 tiene un tag "audio".
Entonces, si hiciera que uRSSus bajara los links de los enclosures, y los agregara a la base de datos, y agrego esto al template de post:
<?py for enclosure in post.enclosures: ?>
<audio autobuffer="Yes" controls="controls" src=#{enclosure.href}></audio><br>
<?py #end ?>
Eso no funcionaría? Bueno, sí!
Y ahí está, yo tenia razón en no implementarlo, porque la forma fácil de hacerlo es dejar que Qt lo haga ;-)
En 1996 era inminente el año de Linux en el escritorio, y esa fiebre estaba impulsada por una de las mejores aplicaciones open source de la época: LyX.
LyX era (es) algo así como un procesador de texto donde uno escribía y generaba LaTeX, que después producía otra cosa con la que uno imprimía. Pero me voy por las ramas, LyX estaba bueno porque usaba uno de los primeros toolkits buenos y libres: XForms.
Bueno, en realidad no era libre, porque era sólo para uso no comercial.
Y no era tan bueno tampoco, pero lo estábamos comparando con Motif así que era mucho más libre y mucho mejor que esa cosa.
De paso: el último release de XForms es de agosto del 2009.
En ese momento, un yo de 25 años estaba enamorado de Python 1.3. Así lo describí:
Sí, Python 1,3. Entonces, yo quería usar este toolkit en C que usaba LyX y este lindo lenguaje que estaba aprendiendo, y quería usar las dos cosas al mismo tiempo.
Corrí (no caminé) hasta mi fiel Slackware 3.0 ELF en mi 486DX2 y empecé a hackear. En un fin de semana tenía algo que andaba.
Inclusive empecé a escribir el santo grial de las aplicaciones de escritorio, una versión GUI de Pine, usando python y su módulo IMAP (python mailer, o PyM):
Liberé la versión 0.1 alpha el 13 de mayo de 1996... y unos meses más tarde Matthias Ettrich empezó KDE, encontré Qt y nunca más pensé en XForms.
Hasta este mes.
Por motivos que no vienen al caso, mencioné PyM en la lista de correo de PyAr el otro día y... bueno, funcionaría todavía pyxforms?
Y sí, funciona!
Me bajé los fuentes de pyxforms-0.1-alpha de algun lugar de la internet, instalé XForms 1.0.9sp2 (sí, el release de hace tres meses), por supuesto que ya tenía python 2.6.4 instalado, hice un setup.py, edité 10 líneas de código y...
Sí, funciona. Se puede bajar esta versión 0.2 (nombre código "Cthulhu was here") aquí apenas 13 años después de la 0.1.
No, no entiendo las esquinas redondeadas extrañas, ni porqué el cursor se ve raro y viejo cuando entra a las ventanas de la aplicación.
Es MUY chiquito y rápido, eso sí.
Honestamente, es útil para alguien? No creo. Me sorprende que algo que escribí en 1996 todavía funcione? Mucho!.