[Madrid-pm] Nuevo módulo

Joaquin Ferrero explorer en joaquinferrero.com
Mie Mar 28 16:23:06 PDT 2007


El otro día se me ocurrió hacer un módulo nuevo: Metro::Madrid.

Es obvio para qué podría ser utilizado 7B^)

En CPAN no he visto nada relacionado con el metro, salvo el 
Acme::MetaSyntactic::metro, que es una tontería.

Es decir... ¡crearíamos una rama nueva en CPAN!

Algunos submódulos y funciones interesantes:

Metro::Madrid - Funciones y métodos sobre el metro de Madrid

     # Creación del objeto
     my $metro = Metro::Madrid->new();

     # Datos básicos
     print $metro->lines();           # Número de líneas
     print $metro->names();           # Nombre de las líneas
     print $metro->names(7);          # idem, de la línea 7
     print $metro->linename(7);       # idem

Metro::Madrid::Stations - Lista de las estaciones de metro

     $x = $metro->stations();         # Número de estaciones
     @x = $metro->stations();         # Nombre de estaciones
     $x = $metro->stations(7);        # idem, de la línea 7

     # Impresión de las estaciones de la línea 7
     print $metro->line(7);

     # Lo mismo, en un sentido determinado
     print $metro->line( {Direction => 0}, 7);

     # Devuelve el transbordo (nombre de la estación)
     # de la línea 7 hacia la línea 5.
     # Si no existe ese transbordo, devuelve undef
     print $metro->line({Transfer => 5}, 7);

     # Lo mismo, pero en vez del nombre, el número de la
     # estación
     print $metro->line({Transfer => 5, index => 1}, 7);


Metro::Madrid::Schedule - Tiempos de apertura y periodicidad

     # Horarios de apertura de una línea
     print $metro->schedule(7);

     # Idem, pero sólo de una estación
     print $metro->schedule({Line => 7, Station => 2});
     print $metro->schedule(7.2);

     # Tiempo entre trenes, a las cuatro de la tarde
     print $metro->period({ Line => 7, Hour => 16 });

     # Idem, en día festivo
     print $metro->period({ Line => 7, Hour => 16, Holiday => 1 });


Metro::Madrid::Routes - Encaminamiento de una estación a otra

     # El camino más corto para ir
     # de Francos Rodríguez a Lavapies
     print $metro->route( {
         LineFrom => 7,
         Origin   => 16,
         LineTo   => 3,
         Target   => 5
     });

     # Idem, abreviado
     print $metro->route( 7.16, 3.5 );

     # Idem, privilegiando el minimizar el número de paradas
     print $metro->route({MinStops => 1 }, 7.16, 3.5 );

     # Idem, el tiempo que se tardará en realizarlo
     print $metro->route({MinStops => 1, Time => 1}, 7.16, 3.5 );

     # Informe completo: tabla con las paradas y tiempos
     print $metro->route({Report => 1}, 7.16, 3.5);


Naturalmente, es sólo una idea. Algunas cosas son fáciles de hacer, pero
otras son algo más complicadas, como por ejemplo los tiempos, aparte de
que sería sospechoso ir en el metro con un cronómetro en la mano :-)

Lo interesante de este módulo es facilitar el transporte de un punto a
otro, pero en conjunto es como un punto de información. Para mí,
particularmente, sería 

A nivel de programación, creo que no habría que hacer mucho, porque lo
más complicado sería lo de calcular el camino más corto, pero para eso
hay módulos que te lo hacen, como el Graph. Naturalmente, el problema
estaría en las excepciones a las reglas (por ejemplo, hay líneas que
cortan a otras más de una vez, hay líneas circulares, etc.)

¿Qué os parece?
¿La idea es muy tonta y una pérdida de tiempo por su inutilidad?
¿La guardo en el APPP (Apartado de Proyectos Personales Pendientes)?

Este fin de semana me quedo en Madrid, así que le miraré un rato... y si
puedo saldré a dar una par de vueltas por el metro :-)

-- 
JoaquinFerrero.com                 Linux User #109802
msn/jab explorer en jab.pucela.net    GPG/PGP 0x42DDB1FE
skype joaquinferrero               phone +34670654075



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