Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Salió rst2pdf 0.16!

Pue­de ob­te­ner­se en el si­tio: http://rs­t2­pdf.­google­co­de.­com

rs­t2­pdf es una he­rra­mien­ta pa­ra con­ver­tir res­truc­tu­red text a PDF usan­do re­por­tlab en vez de La­TeX.

Se ha usa­do pa­ra mu­chas co­sas des­de li­bros a re­vis­ta­s, a fo­lle­to­s, a ma­nua­le­s, a si­tios web y tie­ne mu­chos fea­tu­res:

  • Font em­­be­­­dding (TTF or Ty­­pe1 fo­n­­ts)

  • Ca­s­­ca­­ding Sty­­le­s­hee­­ts

  • Ar­­qui­­te­c­­tu­­ra de plu­­gins muy fle­­xi­­ble (pe­r­­mi­­te ha­­cer co­­sas co­­­mo crear los en­­ca­­be­­­za­­dos en ba­­se a SVG ar­­bi­­tra­­rio­­s!)

  • In­­te­­gra­­ción con Sphi­n­­x.

  • Múl­­ti­­ples la­­you­­ts de pá­­gi­­na

  • Ta­­pas cus­­to­­­mi­­za­­bles via te­m­­pla­­tes

  • Y mu­­cho, mu­­cho más

El cam­bio más gran­de en 0.16 es pro­ba­ble­men­te el so­por­te de Sphi­nx 1.0.­x, si es­tás usan­do Sphi­nx es­ta es la ver­sión que que­ré­s.

Apar­te de eso, una to­ne­la­da de bugs arre­gla­do­s, y al­gu­nos fea­tu­res me­no­res.

Es­te es el chan­ge­log com­ple­to:

  • Fixed Is­­sue 343: Plu­­gged me­­mo­­­ry leak in the RSON pa­r­se­­r.

  • Fix for Is­­sue 287: the­­re is sti­­ll a co­r­­ner ca­­se if you ha­­ve two se­c­­tions wi­­th the sa­­me ti­­tle, at the sa­­me le­­ve­­l, in the sa­­me pa­­ge, in di­­ffe­­rent fi­­les whe­­re the li­nks wi­­ll break.

  • Fixed Is­­sue 367: ge­r­­man-­­lo­­­ca­­li­­zed da­­tes are MM. DD. YY­­YY so when us­ed in sphi­n­­x's te­m­­pla­­te co­­­ver they appea­­red wei­r­­d, like a list ite­­m. Fixed wi­­th a mi­­nor wo­­­rka­­round in the te­m­­pla­­te.

  • Fixed Is­­sue 366: li­nks to "#" make no sen­­se on a PDF fi­­le

  • Ma­­de de­­fi­­ni­­tions from de­­fi­­ni­­tion lis­­ts mo­­­re sty­­la­­ble.

  • Mo­­­ved de­­fi­­ni­­tion lis­­ts to Spli­­tTa­­ble­s, so you can ha­­ve ve­­ry long de­­fi­­ni­­tio­n­s.

  • Fixed Is­­sue 318: Im­­ple­­men­ted Do­­­main spe­­ci­­fic in­­dexes for Sphi­nx 1.0.x

  • Fixed In­­dex li­nks when using Sphi­n­­x/­­pdfbui­l­­de­­r.

  • Fixed Is­­sue 360: Set li­­te­­ra­­l.wo­r­­dW­­rap to No­­­ne by de­­fault so it does­n't inhe­­rit wo­r­­dW­­rap CJK when you use the othe­­rwi­­se co­­­rrect ja­­pa­­ne­­se se­­ttings. In any ca­se, li­­te­­ral blo­­­cks are not su­­ppo­­s­ed to wrap at all.

  • Swi­­tched pdfbui­l­­der to use Spli­­tTa­­bles by de­­fault (it ma­­de no sen­­se not to do it)

  • Fixed Is­­sue 365: so­­­me TTF fo­n­­ts do­­n't va­­li­­da­­te but they wo­­­rk an­­ywa­­y.

  • Set a va­­lid de­­fault ba­seurl for Sphi­nx (makes it mu­­ch fa­s­­te­­r!)

  • New fea­­tu­­re: --u­se-­­nu­m­­be­­­re­­d-­­li­nks to show se­c­­tion nu­m­­bers in li­nks to se­c­­tio­n­s, like "See se­c­­tion 2.3 Te­r­­mi­­na­­tio­­n"

  • Added sty­­le­s­hee­­ts for lan­­d­s­­ca­­pe pa­­per si­­zes (i.e: a4-­­lan­­d­s­­ca­­pe.s­­ty­­le)

  • Fixed Is­­sue 364: So­­­me op­­tions not res­­pe­c­ted when pa­ss­ed in pe­­r-­­doc op­­tions in sphi­n­­x.

  • Fixed Is­­sue 361: mu­l­­ti­­ple li­­ne­­breaks in li­­ne blo­­­cks we­­re co­­­lla­p­se­­d.

  • Fixed Is­­sue 363: stran­­ge cha­­ra­c­­ters in so­­­me ca­­ses in ma­­th di­­re­c­­ti­­ve.

  • Fixed Is­­sue 362: Sma­r­­ter au­­to­­-en­­clo­­­sing of equa­­tions in $...$

  • Fixed Is­­sue 358: --­­rea­­l--­­footno­­­tes de­­fau­l­­ts to Fa­l­se, but help text in­­di­­ca­­tes de­­fault is True

  • Fixed Is­­sue 359: Wrong --­­fi­­t-­­ba­­ck­­groun­­d-­­mo­­­de help string

  • Fixed Is­­sue 356: mis­­sing ce­­lls if a ce­­ll spawns ro­­ws and co­­­lum­n­s.

  • Fixed Is­­sue 349: Wo­­­rk co­­­rre­c­­tly wi­­th lan­­gua­­ges that are avai­­la­­ble in form aa_­­bb and not aa (e­­xa­m­­ple: zh_­c­n)

  • Fixed Is­­sue 345: gi­­ve fi­­le/­­li­­ne in­­fo when the­­re is an error in a raw PDF di­­re­c­­ti­­ve.

  • Fixed Is­­sue 336: JPEG ima­­ges should wo­­­rk even wi­­thout PIL (but gi­­ve a wa­r­­ning be­­­cau­­se si­­zes wi­­ll pro­­­ba­­bly be wro­n­­g)

  • Fixed Is­­sue 351: footno­­­te/­­ci­­ta­­tion re­­fe­­ren­­ces we­­re ge­­ne­­ra­ted in­­co­­­rre­c­­tl­­y, whi­­ch cau­s­ed pro­­­ble­­ms if the­­re was a ci­­ta­­tion wi­­th the sa­­me text as a hea­­di­n­­g.

  • Fixed Is­­sue 353: be­­­tter han­d­­ling of gra­­ph­­vi­­z, so that it wo­­­rks wi­­thout ve­c­­to­r­­pdf but gi­­ves a wa­r­­ning about it.

  • Fixed Is­­sue 354: make to­­­do­­_­­no­­­de from sphi­nx cus­­to­­­mi­­za­­ble.

  • Fixed bug whe­­re nes­ted lis­­ts bro­­ke pa­­ge la­­yout if the pa­­ge was sma­­ll.

  • Sma­r­­ter --i­n­­li­­ne-­­li­nks op­­tion

  • New ex­­ten­­sio­­n: fan­­c­­y­­ti­­tle­s, see //­­ra­l­­si­­na.­­me/we­­blo­­­g/­­po­s­­ts/­­BB906.h­t­­ml

  • New fea­­tu­­re: ta­­b-wi­­dth op­­tion in co­­­de-­­blo­­­ck di­­re­c­­ti­­ve (de­­fau­l­­ts to 8).

  • Fixed Is­­sue 340: en­d­­no­­­tes/­­footno­­­tes we­­re not sty­­le­­d.

  • Fixed Is­­sue 339: cla­ss na­­mes using _ we­­re not usa­­ble.

  • Fixed Is­­sue 335: ugly crash when using ima­­ges in so­­­me spe­­ci­­fic pla­­ces (looks like a re­­po­r­­tlab bu­­g)

  • Fixed Is­­sue 329: make the fi­­gu­­re ali­g­n­­men­­t/­­cla­ss attri­­bu­­tes wo­­­rk mo­­­re like La­­TeX than HT­­M­­L.

  • Fixed Is­­sue 328: list item sty­­les we­­re being ig­­no­­­re­­d.

  • Fixed Is­­sue 186: new --u­se-­­floa­­ti­n­­g-i­­ma­­ges makes ima­­ges wi­­th :a­­li­g­n: set wo­­­rk like in HT­­M­­L, wi­­th the next flo­­wa­­ble flo­­wing be­­­si­­de it.

  • Fixed Is­­sue 307: hea­­de­­r/­­footer from sty­­le­s­heet now su­­ppo­r­­ts in­­li­­ne rest ma­­rkup and subs­­ti­­tu­­tions de­­fi­­ned in the main do­­­cu­­men­­t.

  • New pdf_­­to­­­c_­­de­p­­th op­­tion for Sphi­n­­x/­­pdfbui­l­­der

  • New pdf_u­se_­­toc op­­tion for Sphi­n­­x/­­pdfbui­l­­der

  • Fixed Is­­sue 308: co­m­­pa­­ti­­bi­­li­­ty wi­­th re­­po­r­­tlab from SVN

  • Fixed Is­­sue 323: errors in the co­n­­fi­­g.s­a­m­­ple ma­­de it wo­­­rk wei­r­­d.

  • Fixed Is­­sue 322: Ima­­ge subs­­ti­­tu­­tions di­d­n't wo­­­rk in do­­­cu­­ment ti­­tle.

  • Im­­ple­­men­ted Is­­sue 321: un­­de­r­­li­­ne and strike­­th­­rou­­gh avai­­la­­ble in sty­­le­s­hee­­t.

  • Fixed Is­­sue 317: Ugly error me­ss­a­ge when fi­­le does not exist

La gente cree todo en la Internet

Ho­y, he leí­do que es­te mes de Oc­tu­bre tie­ne 5 vier­nes, 5 sá­ba­dos y 5 do­min­go­s. Es­to só­lo pa­sa ca­da 823 año­s. En el Oc­tu­bre con más fi­nes de se­ma­na de mi vi­da es­toy CAS­TI­GA­DA SIN SALI­R.

No va­le la pe­na li­nkear­lo por­que es­tá en to­dos la­dos

Hay va­ria­cio­nes, por su­pues­to, 5 lu­nes/­mar­tes/­miérco­le­s, dis­tin­tos me­s­es, etc.

¿Pe­ro por­qué lo cree la gen­te? ¡Es ob­vio si lo pen­sás un mi­nu­to que no hay ma­ne­ra de que sea cier­to!

  1. Oc­­tu­­bre tie­­ne una lo­n­­gi­­tud fi­­ja (31 día­s)

  2. Da­­do que la se­­ma­­na son 7 día­s, eso son 4 se­­ma­­nas +3 días en oc­­tu­­bre.

  3. Si oc­­tu­­bre em­­pie­­za un vie­r­­nes, esos 3 días al fi­­nal son vie­r­­nes/­­sá­­ba­­do­­/­­do­­­mi­n­­go.

En­ton­ce­s, pa­ra que es­to fue­ra cier­to, el 1e­ro de oc­tu­bre de­be­ria caer vier­nes só­lo una vez ca­da 823 año­s. Sue­na mu­cho más es­tú­pi­do di­cho así, no?

Real­men­te no en­tien­do co­mo al­guien con me­dio ce­re­bro pue­de caer en es­to, pe­ro he vis­to gen­te a la que le fun­cio­na el bo­cho re­pe­tir­lo. Co­men­ten sus teo­rías por fa­vor :-)

Como ser un nerd en argentina y no morir en el intento

Ser un nerd en Ar­gen­ti­na tie­ne mu­chos pro­ble­ma­s. Uno de ellos es que los pre­cios que nos quie­ren co­brar por ca­si cual­quier chi­che elec­tró­ni­co es ri­dícu­lo.

Otro de los pro­ble­mas es que el 99% de la gen­te no sa­be co­mo ha­cer pa­ra que no les afa­nen de esa ma­ne­ra. Y ojo, no ha­blo de contra­ban­dea­r, ha­blo de usar tus de­re­chos y tus re­cur­sos le­ga­les. Acla­ro: no soy abo­ga­do, si si­guien­do es­tos con­se­jos vas pre­so, es co­sa tu­ya, yo di­go lo que creo que es­tá bien no­má­s.

Así que es­ti­ma­dos lec­to­res, acá es­tá mi guía pa­ra com­prar chi­ches sin te­ner que em­pe­ñar un ri­ñón (que tam­bién es ile­ga­l, ya que es­ta­mo­s).

Lo pri­me­ro que ne­ce­si­tás es pa­cien­cia. Al­gu­nos de los me­ca­nis­mos que te voy a con­tar lle­van uno o dos me­s­es, o re­quie­ren co­la­bo­ra­ción de ter­ce­ro­s. Pe­ro bue­no, so­mos ner­d­s, re­sol­ver pro­ble­mas es lo nues­tro.

Chucherías Chinas

Ten­go un bo­ni­to mi­cros­co­pio de bol­si­llo de 80x que me com­pró mi es­po­sa. Cos­to? $90. Es un ju­gue­te bue­ní­si­mo, re edu­ca­ti­vo, y cuan­do te­nía 6 años hu­bie­ra da­do la fi­gu­ri­ta di­fí­cil (e­ra la ta­rán­tu­la) por uno de es­to­s.

Cos­to en chi­na? U$S 9.39, con en­vío gra­tis

O sea, la mi­ta­d. Y co­mo sa­le me­nos de U$S 25, de he­cho es le­gal traer­lo por co­rreo y no pa­gás ta­sa de adua­na.

De to­das for­ma­s, pro­ba­ble­men­te no ten­gas que ir a la adua­na por­que....

Pe­ro po­né­le que pa­gás la ta­sa. Con ta­sa y to­do, son U$S 15, o sea $60. Si pa­sás por la adua­na a ve­ces y no te mo­les­ta ha­cer co­la un ra­to (lle­va­te un li­bro­)....

Pe­ro es aún me­jo­r. Por­que en http://­Dea­lEx­tre­me.­com te­nés un mo­de­lo de 150x por U$S 12! De he­cho, te­nés 36 mo­de­los de mi­cros­co­pios!

Por ejem­plo, en http://a­li­ba­ba.­com hay al­go así co­mo 35000 ven­de­do­res de ta­ble­ts con An­droi­d. Al­gu­na te va a ser­vir ;-)

Aho­ra bien, su­pon­ga­mos que te de­ci­dis­te y te en­car­gas­te al­go de Chi­na o si­mi­la­r, qué te­nés que sa­be­r:

  • Gua­r­­dá la "fa­c­­tu­­ra" que te dá el si­­tio, y la URL del pro­­­du­c­­to.

    La fa­c­­tu­­ra sue­­le ser un HT­­M­­L, im­­pri­­mí­­lo. Cuan­­do re­­ti­­rás en Adua­­na lo ne­­ce­­si­­tá­s. No lo mues­­tres de en­­tra­­da! Só­­­lo si te lo pi­­den.

  • An­­dá dis­­pues­­to a pa­­ga­­r. Es al cue­­te dis­­cu­­ti­­r. Te­­né en cuen­­ta que aún con lo de la adua­­na es ba­­ra­­to, y no te ha­­gas ma­­la san­­gre.

  • Si vas ti­­po 10:30 sue­­le ha­­ber po­­­ca gen­­te.

  • An­­dá tran­­qui­­lo, lle­­va­­te al­­go pa­­ra en­­tre­­te­­ne­r­­te po­r­­que en una de esas lle­­va un ra­­to. Igual hay si­­lla­s, que se yó, no es la mue­r­­te de na­­die.

Cómo Pagar

La más fá­cil es Pa­y­Pa­l. Si te­nés tar­je­ta de cré­di­to es tri­via­l.

El amigo que viene de afuera

Sí te­nés un co­no­ci­do que via­ja al ex­te­rior con re­gu­la­ri­da­d:

  • Po­­­dés co­m­­prar en USA y que te re­­ci­­ba y trai­­ga las co­­sas.

  • Ha­s­­ta U$S 300 (si el que via­­ja es ar­­gen­­ti­­no) no se pa­­ga adua­­na. Se pa­­ga el 50% por en­­ci­­ma de esa ci­­fra.

  • Si es un ex­­tran­­je­­ro que trae una co­­­sa pro­­­pia "en uso" y te la ven­­de acá, no creo que ten­­gas que pa­­gar im­­po­r­­ta­­ción (no es­­toy se­­gu­­ro)

Vea­mos un ejem­plo!

  • Una HP mi­­ni co­m­­pra­­da acá: $1999, o U$S 500

  • Co­m­­pra­­da en USA: U$S 329.

    • Pa­­­gan­­­do adua­­­na con fran­­­qui­­­cia: U$S 345

    • Pa­­­gan­­­do adua­­­na fu­­­ll: U$S 495 (ahí no co­­n­­­vie­­­ne ;-)

Pe­ro que te pa­re­ce­ría te­ner la mis­ma ne­tbook por U$S 180?

Bue­no, re­sul­ta que HP (y to­das las em­pre­sas) ven­den pro­duc­tos "re­fur­bis­he­d" o sea rea­con­di­cio­na­do­s. Nor­mal­men­te no te vas a dar cuen­ta de na­da, tie­nen un ra­yón mí­ni­mo, o al­go así. Hoy la mis­ma ne­tbook es­ta­ba a U$S 179.90. Nor­mal­men­te sa­len más o me­nos la mi­ta­d. Y vie­nen con ga­ran­tía.

Y fi­já­te que la HP mi­ni por U$S 180, pa­gan­do la adua­na fu­ll... cues­ta el 54% de lo que sa­le la nue­va acá. Eso es ne­go­cio.

Al­ter­na­ti­va­men­te, Ciu­dad del Es­te (Pa­ra­gua­y) es­tá muy cer­ca de Ar­gen­ti­na. Y es muy ba­ra­to com­prar elec­tró­ni­cos ahí. Y te­nés los U$S 300 de fran­qui­cia.

Pe­ro hay má­s! Un ciu­da­dano pa­ra­gua­yo que vi­si­ta ar­gen­ti­na pue­de traer cier­tas co­sas con cier­tos lí­mi­tes. Hay que ha­blar con él y coor­di­na­r!

Si no co­no­cés a na­die... bue­no, an­dá de pa­seo a ca­ta­ra­ta­s! Pa­sa­la bien! Y com­pra­te una cá­ma­ra o lo que sea en la ex­cur­sión a Ciu­dad del Es­te.

Accesorios

No com­pres ac­ce­so­rios ori­gi­na­le­s. Por ejem­plo: la ba­te­ría ori­gi­nal de re­pues­to de mi eeePC 701? U$S 110, 3 ele­men­to­s. La "tru­cha" de 6 ele­men­to­s? U$S 40.

Conclusión

Oja­lá sir­va de al­go, si te­nés más tips po­ne­los en los co­men­ta­rio­s!

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.


Contents © 2000-2024 Roberto Alsina