Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Modularizando tu aplicación: Yapsy

Una ma­ne­ra (si es­tás pro­gra­man­do en Py­tho­n) es usar Yap­sy..

Yap­sy es asom­bro­so. Tam­bién, ca­re­ce com­ple­ta­men­te de do­cu­men­ta­ción en­ten­di­ble. Vea­mos si es­te post arre­gla un po­co esa par­te y de­ja só­lo lo asom­bro­so.

Up­da­te: No ha­bía vis­to la do­cu­men­ta­ción nue­va de Yap­s­y. Es mu­cho me­jor que la que ha­bía an­tes :-)

Es­ta es la idea ge­ne­ral con yap­s­y:

  • Creás un Plu­­gin Ma­­na­­ger que pue­­de en­­co­n­­trar y ca­r­­gar plu­­gins de una lis­­ta de lu­­ga­­res (por eje­m­­plo, de ["/us­­r/s­ha­­re/a­­pp­­na­­me/­­plu­­gi­n­s", "~/.a­­pp­­na­­me/­­plu­­gi­n­s"]).

  • Una ca­­te­­go­­­ría de plu­­gins es una cla­­se.

  • Hay un ma­­peo en­­tre no­m­­bres de ca­­te­­go­­­ría y cla­­ses de ca­­te­­go­­­ría.

  • Un plu­­gin es un mó­­­du­­lo y un ar­­chi­­vo de me­­ta­­da­­ta. El mó­­­du­­lo de­­fi­­ne una cla­­se que he­­re­­da de una cla­­se de ca­­te­­go­­­ría, y pe­r­­te­­ne­­ce a esa ca­­te­­go­­­ría.

    El ar­­chi­­vo de me­­ta­­da­­ta tie­­ne co­­sas co­­­mo el no­m­­bre del plu­­gi­n, la des­­cri­p­­ció­­n, la UR­­L, ve­r­­sió­­n, etc.

Una de las me­jo­res co­sas de Yap­sy es que no es­pe­ci­fi­ca de­ma­sia­do. Un plu­gin va a ser sim­ple­men­te un ob­je­to Py­tho­n, po­dés po­ner lo que quie­ras ahí, o lo po­dés li­mi­tar de­fi­nien­do la inte­faz en la cla­se de ca­te­go­ría.

De he­cho, lo que ven­go ha­cien­do con las cla­ses de ca­te­go­ría es:

  • Arran­­co con una cla­­se va­­cía

  • Im­­ple­­men­­to dos plu­­gins de esa ca­­te­­go­­­ría

  • Los pe­­da­­zos en co­­­mún los mue­­vo den­­tro de la ca­­te­­go­­­ría.

Pe­ro créan­me, es­to va a ser mu­cho más cla­ro con un ejem­plo :-)

Lo voy a ha­cer con una apli­ca­ción grá­fi­ca en Py­Q­t, pe­ro Yap­sy fun­cio­na igual de bien pa­ra apli­ca­cio­nes "head­le­ss" o pa­ra lí­neas de co­man­do.

Co­men­ce­mos con al­go sim­ple: un edi­tor HT­ML con un wi­dget pre­view.

//ralsina.me/static/yapsy/editor1.jpeg

Un edi­tor sim­ple con pre­view

Es­te es el có­di­go de la apli­ca­ció­n, que es real­men­te sim­ple (no pue­de guar­dar ar­chi­vos ni na­da in­te­re­san­te, es só­lo un ejem­plo­):

Pe­ro es­ta apli­ca­ción tie­ne un ob­vio lí­mi­te: hay que es­cri­bir HT­M­L! Por qué no es­cri­bir py­thon y que lo mues­tre re­sal­ta­do en HT­M­L? O ma­rkup de Wiki! O reS­truc­tu­red tex­t!

Uno po­dría, en prin­ci­pio, im­ple­men­tar to­dos esos mo­do­s, pe­ro es­tás asu­mien­do la res­pon­sa­bi­li­dad de so­por­tar ca­da co­sa-­que-se-­con­vier­te-en-HT­M­L. Tu apli­ca­ción se­ría un mo­n­oli­to. Ahí en­tra Yap­s­y.

Cree­mos en­ton­ces una ca­te­go­ría de plu­gin­s, lla­ma­da "For­ma­tte­r" que to­ma tex­to pla­no y de­vuel­ve HT­M­L. Des­pués agre­gue­mos co­sas en la UI pa­ra que el usua­rio pue­da ele­gir que for­ma­tter usar, e im­ple­men­te­mos un pa­r.

Es­ta es la cla­se de ca­te­go­ría de plu­gin­s:

Por su­pues­to que no sir­ve de na­da sin plu­gin­s! Asi que cree­mos un pa­r.

Pri­me­ro, un plu­gin qye to­ma có­di­go py­thon y de­vuel­ve HT­M­L, usan­do pyg­men­ts.

Co­mo ven, eso va en una car­pe­ta plu­gin­s. Des­pués le de­ci­mos a Yap­sy que bus­que los plu­gins ahi aden­tro.

Pa­ra ser re­co­no­ci­do co­mo un plu­gi­n, ne­ce­si­ta me­ta­da­ta:

Y real­men­te, eso es to­do lo que hay que ha­cer pa­ra ha­cer un plu­gi­n. Acá hay otro pa­ra com­pa­ra­r, que usa do­cu­tils pa­ra for­ma­tear reS­truc­tu­red Tex­t:

Y acá es­tán en ac­ció­n:

//ralsina.me/static/yapsy/editor2.jpeg

reSt mo­de

//ralsina.me/static/yapsy/editor3.jpeg

Py­thon mo­de

Of cour­se using ca­te­go­ries you can do things like a "Tool­s" ca­te­go­r­y, whe­re the plu­gins get added to a Tools me­nu, too.

Es­te es el có­di­go del la­do de la apli­ca­ció­n:

Re­su­mien­do: es fá­ci­l, y te lle­va a me­jo­rar la es­truc­tu­ra in­ter­na de tu apli­ca­ción y ter­mi­nás con me­jor có­di­go.

Có­di­go fuen­te de to­do.

Sería un vendido, pero nadie me compra!

For Sale Portobello Mkt
For Sale Portobello Mkt by Jason Jones, under a CC-by-nc-sa license.

Es na­tu­ral pa­ra al­guien que no me co­no­ce pen­sar que vi­vo una vi­da de lu­jo, via­je in­ter­na­cio­nal y pla­ce­res exó­ti­cos [1] pe­ro hay una pe­que­ña co­sa que me da ver­güen­ci­ta:

Ra­ra vez me han pa­ga­do pa­ra pro­gra­ma­r.

¡En se­rio! La ma­yor par­te del di­ne­ro con el que vi­vo pro­vie­ne de co­sas que no tie­nen na­da que ver con lo que lean en mi blo­g.

Me gano la vi­da ha­cien­do co­sas co­mo ins­ta­lar As­te­risk en ca­ll cen­ter­s, o con­fi­gu­rar re­pli­ca­ción de MyS­QL o ha­cer VP­Ns usan­do rou­ters ba­zo­fia y des­de ya que si ne­ce­si­tás esa cla­se de tra­ba­jo por fa­vor lla­má a Net Ma­na­gers so­mos bue­ní­si­mos y co­bra­mos ba­ra­to.

Pe­ro si bien amo esa cla­se de co­sas [2] hay otras que me gus­tan má­s. Me gus­ta más pro­gra­mar que cn­fi­gu­rar As­te­risk.

Por otro la­do, no soy un gran pro­gra­ma­do­r. Soy pro­me­dio, pe­ro más rá­pi­do que la ma­yo­ría.

Y úl­ti­ma­men­te no­té un fe­nó­meno in­te­re­san­te.

cuán­to ga­né por mis pri­me­ros 14 años de de­sa­rro­llo li­bre y open sour­ce? $0 [3]

Cuan­to ga­né es­te úl­ti­mo año? U$S 500 (y va a ser un po­co más tam­bién).

Pa­ra al­guien del pri­mer mun­do eso es chau­cha­s, pe­ro acá en la tie­rra de la car­ne ba­ra­ta, eso es... unos 50 ki­los de pe­ce­to, o 10 ce­nas afue­ra en bue­nos res­tau­ran­tes con mi es­po­sa. [4]

Me pre­gun­to si es par­te de una ten­den­cia? Hay otros que ha­yan re­ci­bi­do co­sas de es­te ti­po ul­ti­ma­men­te?

De cual­quier for­ma, se sien­te ex­ce­len­te cuan­do un tra­ba­jo que uno ha­ce por amor es apre­cia­do (y crean­me, na­die ha­ce al­go por 14 años sin co­brar na­da, ex­cep­to por amo­r).

Por las du­da­s: es­to no sig­ni­fi­ca que hay que pa­gar­me pa­ra que arre­gle un bug o im­ple­men­te un fea­tu­re. Sí quie­re de­cir que si usas uno de mis pro­gra­mas y que­rés que me sien­ta bien ... me po­dés man­dar un lin­do mail :-)



Contents © 2000-2023 Roberto Alsina