[Madrid-pm] Nuevo módulo

Enrique Nell blas.gordon en gmail.com
Mie Mar 28 17:33:00 PDT 2007


Hola

A mí me parece una idea muy interesante y creo que te vas a divertir
un montón programándolo.
En el sitio web de Metro de Madrid hay una página que permite calcular rutas:

http://www.metromadrid.es/01_trayecto.asp (elige Consultar trayecto en
formato Flash).

Está bien, pero el módulo Perl sería mucho más versátil, ya que
permitiría crear una presentación personalizada de la información (por
ejemplo, alguien podría querer calcular un montón de rutas sin tener
que hacerlo manualmente una a una, o prescindir de la presentación
gráfica y querer saber simplemente el número de estaciones que hay
entre el origen y el destino, y las salidas que hay en el destino, o
saber qué estaciones ofrecen acceso al tren, etc.).
Supongo que para empezar podrías obtener la información sobre
estaciones, horarios, etc. en el sitio de Metro de Madrid utilizando
WWW::Mechanize. También sería interesante registrar información sobre
tramos de escalera que hay que bajar para llegar al andén de una línea
(o subir para salir); en algunas estaciones, como la de Cuatro
Caminos, hay que bajar al mismo infierno para coger el metro. En
otras, como la de Diego de León, tienes que caminar kilómetros bajo
tierra (es aconsejable llevar provisiones y cantimplora)...

Quien sabe, si lo publicas igual te imitan mongers de otras ciudades y
extienden el proyecto a otros medios de transporte.

Saludos
Enrique



On 3/29/07, Joaquin Ferrero <explorer en joaquinferrero.com> wrote:
> 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
>
> _______________________________________________
> Madrid-pm mailing list
> Madrid-pm en pm.org
> http://mail.pm.org/mailman/listinfo/madrid-pm
>


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