Eric (Discworld, #9; Rincewind, #4)
Review:Clearly one of the lighter books in the series so far. |
Review:Clearly one of the lighter books in the series so far. |
Una manera (si estás programando en Python) es usar Yapsy..
Yapsy es asombroso. También, carece completamente de documentación entendible. Veamos si este post arregla un poco esa parte y deja sólo lo asombroso.
Update: No había visto la documentación nueva de Yapsy. Es mucho mejor que la que había antes :-)
Esta es la idea general con yapsy:
Creás un Plugin Manager que puede encontrar y cargar plugins de una lista de lugares (por ejemplo, de ["/usr/share/appname/plugins", "~/.appname/plugins"]).
Una categoría de plugins es una clase.
Hay un mapeo entre nombres de categoría y clases de categoría.
Un plugin es un módulo y un archivo de metadata. El módulo define una clase que hereda de una clase de categoría, y pertenece a esa categoría.
El archivo de metadata tiene cosas como el nombre del plugin, la descripción, la URL, versión, etc.
Una de las mejores cosas de Yapsy es que no especifica demasiado. Un plugin va a ser simplemente un objeto Python, podés poner lo que quieras ahí, o lo podés limitar definiendo la intefaz en la clase de categoría.
De hecho, lo que vengo haciendo con las clases de categoría es:
Arranco con una clase vacía
Implemento dos plugins de esa categoría
Los pedazos en común los muevo dentro de la categoría.
Pero créanme, esto va a ser mucho más claro con un ejemplo :-)
Lo voy a hacer con una aplicación gráfica en PyQt, pero Yapsy funciona igual de bien para aplicaciones "headless" o para líneas de comando.
Comencemos con algo simple: un editor HTML con un widget preview.
Este es el código de la aplicación, que es realmente simple (no puede guardar archivos ni nada interesante, es sólo un ejemplo):
Pero esta aplicación tiene un obvio límite: hay que escribir HTML! Por qué no escribir python y que lo muestre resaltado en HTML? O markup de Wiki! O reStructured text!
Uno podría, en principio, implementar todos esos modos, pero estás asumiendo la responsabilidad de soportar cada cosa-que-se-convierte-en-HTML. Tu aplicación sería un monolito. Ahí entra Yapsy.
Creemos entonces una categoría de plugins, llamada "Formatter" que toma texto plano y devuelve HTML. Después agreguemos cosas en la UI para que el usuario pueda elegir que formatter usar, e implementemos un par.
Esta es la clase de categoría de plugins:
Por supuesto que no sirve de nada sin plugins! Asi que creemos un par.
Primero, un plugin qye toma código python y devuelve HTML, usando pygments.
Como ven, eso va en una carpeta plugins. Después le decimos a Yapsy que busque los plugins ahi adentro.
Para ser reconocido como un plugin, necesita metadata:
Y realmente, eso es todo lo que hay que hacer para hacer un plugin. Acá hay otro para comparar, que usa docutils para formatear reStructured Text:
Y acá están en acción:
Of course using categories you can do things like a "Tools" category, where the plugins get added to a Tools menu, too.
Este es el código del lado de la aplicación:
Resumiendo: es fácil, y te lleva a mejorar la estructura interna de tu aplicación y terminás con mejor código.
|
Es natural para alguien que no me conoce pensar que vivo una vida de lujo, viaje internacional y placeres exóticos [1] pero hay una pequeña cosa que me da vergüencita:
Rara vez me han pagado para programar.
¡En serio! La mayor parte del dinero con el que vivo proviene de cosas que no tienen nada que ver con lo que lean en mi blog.
Me gano la vida haciendo cosas como instalar Asterisk en call centers, o configurar replicación de MySQL o hacer VPNs usando routers bazofia y desde ya que si necesitás esa clase de trabajo por favor llamá a Net Managers somos buenísimos y cobramos barato.
Pero si bien amo esa clase de cosas [2] hay otras que me gustan más. Me gusta más programar que cnfigurar Asterisk.
Por otro lado, no soy un gran programador. Soy promedio, pero más rápido que la mayoría.
Y últimamente noté un fenómeno interesante.
cuánto gané por mis primeros 14 años de desarrollo libre y open source? $0 [3]
Cuanto gané este último año? U$S 500 (y va a ser un poco más también).
Para alguien del primer mundo eso es chauchas, pero acá en la tierra de la carne barata, eso es... unos 50 kilos de peceto, o 10 cenas afuera en buenos restaurantes con mi esposa. [4]
Me pregunto si es parte de una tendencia? Hay otros que hayan recibido cosas de este tipo ultimamente?
De cualquier forma, se siente excelente cuando un trabajo que uno hace por amor es apreciado (y creanme, nadie hace algo por 14 años sin cobrar nada, excepto por amor).
Por las dudas: esto no significa que hay que pagarme para que arregle un bug o implemente un feature. Sí quiere decir que si usas uno de mis programas y querés que me sienta bien ... me podés mandar un lindo mail :-)
Video largo!