[Madrid-pm] Consejos importantes

DervishD bugs en dervishd.net
Mie Mar 28 04:23:09 PDT 2007


    Hola Joaquín :)

 * Joaquín Ferrero <explorer en joaquinferrero.com> dixit:
> DervishD escribió:
> >     Gracias por tu respuesta :) En principio lo pondré en "Getopt::", a
> > menos que decida hacerme una jerarquía "corporativa" de módulos,
> > empezando por "DervishD::" (por no pensar nuevos nombres, uso el mote) o
> > "DD::". Consultaré con la gente que está usando ahora "Common.pm" a ver
> > qué opinan.
> 
> Leete el apartado Description del módulo Getopt::Mixed. Entero.

    Ya, si ya sé que ese en concreto está obsoleto porque Getopt::Long
ya hace algo parecido, pero es que Getopt::Long no hace todo lo que yo
necesito.

> Si quieres incorporar algo a CPAN que no tenga alguno de los módulos,
> por ejemplo a Getopt::Long, lo normal es que llames a tu módulo
> Getopt::Long::More, por ejemplo.

    Es que mi código no es una exacta derivación de ninguno de CPAN, que
yo sepa. Igual en los Getopt:: últimos que se han ido añadiendo desde
que yo hice la investigación ya hay algo que haga lo mismo, pero estoy
acostumbrado a mi getopt, así que no sé si merecerá la pena instalar un
módulo de CPAN, mantenido por otro, cuando ya tengo lo que necesito.

    En el caso de Getopt::Long, mi código no lo extiende. O mejor dicho,
se puede considerar que mi código añade funcionalidad de "clusters" que
no tiene Getopt::Long, pero es que también cambia la sintáxis
precisamente porque la de Getopt::Long no me gustaba.

> Y poner el nombre de la persona en el módulo, es algo que no he visto en 
> ningún lado, mucho menos en CPAN.

    Eso sólo sería si lo dejo a nivel privado, para usar un namespace
aparte.
 
> Otro detalle es que lo ideal es no publicar módulos que hagan cosas
> que ya hacen otros módulos. Esto puede ser muy difícil de investigar,
> como es tu caso. Otras veces es muy fácil.

    En general, siempre busco en CPAN a ver qué hay hecho. Muchas veces
encuentro cosas parecidas y aunque no las pueda (o quiera) usar, lo que
está claro es que me permiten implementar mi propia solución de una
forma más sencilla y en general mejor. Hay veces que, simplemente
encapsulando un módulo ya existente, ya tienes tu solución (por ejemplo,
si el módulo en cuestión usa excepciones que son cadenas de texto y no
objetos).

> existía ese módulo desde hace años, e incluso hace más cosas que el
> mío, así que nada, excepto ver si se puede ampliar, y en ese caso, lo
> primero es hablar con el autor. Nada de crear un módulo nuevo.

    Esto es lo que hago habitualmente con el software libre, pero en
algunas ocasiones no me puedo permitir el lujo de esperar a que el autor
añada lo que necesito (y eso contando con que lo quiera añadir), así que
acabo escribiendo mis propias soluciones.

    Por otro lado, entiendo que esa sea la política de CPAN, pero no es
a lo que estoy acostumbrado: si no encuentro algo que me satisfaga, mi
primera opción es contactar con el autor si el cambio que necesito es
mínimo (especialmente si ya he hecho ese cambio); de lo contrario,
prefiero hacer las cosas a mi manera. Si luego nadie quiere usar mi
código, al menos tienen la alternativa de hacerlo, y por supuesto mi
primera intención es que funcione para mí ;) lo de compartirlo es porque
me parece que siempre hay que compartir lo que se crea.

    Con esto no quiero decir que mi solución sea mejor, igual es hasta
peor, pero se adapta mejor a mis necesidades, que son lo primero que
quiero cubrir al hacer código nuevo. Por ejemplo, la función del
"Common.pm" llamada "barf" podría parecerle una mierda a cualquiera,
porque no lanza una excepción, sale con "exit" en lugar de con "die",
con lo cual en un eval es inutil, pero es que se creó precisamente para
on salir con una excepción (es una larga historia) y al final me la
quedé porque me había acostumbrado al "or barf...". ¿Es una solución
peor que croak()? Pues cuando se creó, no, era eso lo que se necesitaba.
¿Es una solución mejor? Pues no, ni de coña, es menos completa que
croak() y de hecho va a cambiar aprovechando que se reescribirán algunos
scripts. ¿Se puede usar croak() en su lugar? Pues no, se usa en muchos
contextos sin parámetros y hasta que eso no se cambie... Y sí, ya sé que
es que ese tipo de cosas no se hacen, pero no siempre se puede elegir.

    Y por supuesto, cada caso es un mundo, puede que haya veces en que,
por la razón que sea, sea mejor usar algo ya hecho y probado que no se
adapte del todo que hacer una solución desde cero que se adaptará
perfectamente. Hay que valorar muchas cosas y creemé que reinventar
ruedas no suele ser mi primera opción porque soy un vago XDDD

> Las personas que solicitan comentarios para incluir un nuevo módulo
> mandan un RFC:

    Gracias por el enlace :) Lo de publicarlo en CPAN es secundario.
Primero que funcione como tiene que funcionar, después lo pongo en el
repo y por último en mi página. Después ya me plantearía ponerlo en CPAN
o no. Para empezar, y aunque lo escriba, no tiene por qué ser útil para
nadie más.

> Naturalmente, a nivel privado, puedes llamarlo como quieras :-)

    Hombre, ya XDDDD

    Y gracias por los consejos :)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!


Más información sobre la lista de distribución Madrid-pm