2009-03-04 1660 views
16

Me gustaría dar una presentación para mis compañeros de trabajo que muestre algunas cosas increíbles que Perl puede hacer, cosas que harían que tanto los programadores como los no programadores se dijeran a sí mismos: "¡¿Quién puede hacer eso ?!" Realmente quiero llamar la atención, ya que muchos piensan que Perl es un lenguaje moribundo, pero también divertido y entretenido.¿Cómo puedo impresionar a las personas con las capacidades de Perl?

Algunas ideas que tengo son demostraciones de los siguientes módulos:

Cualquier recomendación o comentarios?

BTW somos una empresa de tecnología (administramos un centro de datos) por lo que la alfabetización informática de mis compañeros de trabajo es alta.

+3

Francamente, me sorprendería si viera código Perl que no pareciera que alguien vomitó en la pantalla;) –

+6

Kent, de forma gratuita para ver cualquiera de mis código en CPAN, entonces. –

Respuesta

10

Creo que CPAN es bastante impresionante en sí mismo. La facilidad de instalación de los nuevos módulos es muy buena, como es el hecho de que son all allí.

Y luego combinar módulos para hacer cosas geniales: generar RSS (o Atom) a partir de prácticamente cualquier dato que pase, usando GraphViz::* para generar imágenes bonitas (tm).

También puede consultar los tutoriales de algunos de los módulos de tipo de marco grande, Catalyst o POE, por ejemplo, tienen algunas cosas bastante ingeniosas que puede hacer con poco código.

Si la cultura local no es demasiado tensa, algunos de los módulos Acme :: * (Acme::Bleach por ejemplo) son bastante ingeniosos y seguramente te harán reír.

Por último, el uso de XML::Twig por supuesto, una sola línea que proporciona la tasa de cambio actual entre el dólar y el euro:

perl -MXML::Twig -l -e'print XML::Twig->parse("http://www.x-rates.com")->first_elt(q{a[@href="/d/USD/EUR/graph120.html"]})->text' 

Es bastante fácil de adaptar para el desguace de datos desde otro sitio web.

+0

Buenas ideas, gracias, el Acme :: Bleach me recordó a Acme :: EyeDrops que me gusta – mcsnolte

+0

http://search.cpan.org/dist/Acme-Bleach –

19

Hace años, cuando estaba aprendiendo a programar, el primo de mi novia me mostró un guión Perl que había escrito que contactaba una base de datos que contenía las posiciones de todos los satélites conocidos, y calculó los tiempos de sobrevuelo de los objetos más grandes, como la estación espacial Mir. La secuencia de comandos se ejecutó a través de cron en un servidor que ejecutó, y se ejecutaría periódicamente y luego le enviaría una página unos 5 minutos antes de que el objeto dado se viera sobre su cabeza en el cielo nocturno. Mientras caminábamos por la ciudad, él pudo llamar la atención de todos al señalar de repente y decir "¡MIRAR!", Y todos aplaudieron y caminaron hacia la derecha mientras el satélite volaba sobre sus cabezas.

Estaba realmente impresionado con ese guión en ese momento, ya que no tenía idea de cómo escribir un programa tan complejo. Ahora que tendría una idea mucho mejor, todavía creo que fue una buena demostración, ya que mostró algo novedoso que se podía hacer con el lenguaje en un tiempo relativamente corto y con poco sudor. Así que yo diría que escogáis algo novedoso o interesante y enfatizo la economía de lenguaje de Perl y sus capacidades de trabajo en red.

+0

¿Puedes pedirle a tu amigo ese guión? Solo quiero que parezca genial (en los círculos de la derecha) – Richard

+0

lo siento, no puedo hacer. ;) Esto fue hace unos 10 años, y desde entonces ese gf es un ex-gf con el que he perdido contacto desde hace mucho tiempo. –

+0

Tengo la duda de que un satélite se puede ver a simple vista (no tengo dudas de que se puede escribir el guión). – jfs

5

Alguna combinación de raspado de pantalla, interacción con programas externos y análisis de un archivo de texto realmente rápido impresionaría a las personas. El ejemplo dado por Squook definitivamente encajaría en la cuenta.

Por otro lado, ¿por qué no usarlo en su trabajo diario, escribir herramientas tremendamente útiles que todos los demás usan y explicar a las personas que usted hizo las herramientas en Perl? De esta forma obtendrá cosas útiles para el trabajo, y la gente en su lugar de trabajo seguramente apreciaría el valor de haciendo el trabajo. :)

2

Si desea utilizar Image::Magick, podría hacer una secuencia de comandos rápida que podría convertir una imagen normal en arte ASCII. Ese sería un guión bastante rápido para hacer. Aplique el sobel operator y luego convierta el brillo resultante en valores ASCII. De hecho, he hecho esto en Python: example.

5

Una de las mejores cosas para mí es el uso de Perl para la generación de código. Especialmente cuando se trata de otros idiomas. He escrito varios scripts pequeños para generar clases C++ y código Java.

Cuando era un neófito de Perl. Escribí este fragmento de código, que generó archivos de esquema basados ​​en nuestra base de datos. Alrededor de 2 horas después descubrí que no necesitaba hacer esto para DBIx::Class. Este no es un gran código de Perl (no me votes por él. Es solo un ejemplo), pero generó exactamente 200 archivos de esquema para mí.

my @db = `mysql -u XXXXX -pXXXXX --skip-column-names -e "show databases;"`; 

foreach my $db_name (@db) { 
    chomp($db_name); 
    my @tables = `mysql -u XXXXX -pXXXXX --skip-column-names -e "use $db_name; show tables;"`; 
    $_ =~ s/\n// foreach(@tables); 

    unless (-e "$db_name.pm") { 
     open(DBFILE, '>', "$db_name.pm"); 
     print DBFILE "package mysql::schemes::$db_name;\n"; 
     print DBFILE "use base qw/DBIx::Class::Schema/;\n\n"; 
     print DBFILE '__PACKAGE__->load_classes(qw/' . join(' ', @tables) . "/);\n\n"; 
     print DBFILE "1;"; 
     close(DBFILE); 
    } 
    mkdir $db_name unless (-d $db_name or -e $db_name); 
    foreach my $table_name (@tables) { 
      my @columns = `mysql -u XXXX -pXXXX --skip-column-names -e "USE $db_name; desc \\\`$table_name\\\`;"`; 
      $_ =~ s/\n$// foreach(@columns); 

      my (@names, $primary_key); 
      foreach (@columns) { 
       my ($name, $type, $null, $key, $default) = split(/\t/, $_); 
       chomp($default); 
       push(@names, $name); 
       $primary_key = $name if($key ne ''); 
      } 

      unless (-e "$db_name/$table_name.pm") { 
       open(TBFILE, '>', "$db_name/$table_name.pm"); 
       print TBFILE "package mysql::schemes::" . $db_name . "::" . $table_name . ";\n"; 
       print TBFILE "use base qw/DBIx::Class/;\n\n"; 
       print TBFILE "__PACKAGE__->load_components(qw/PK::Auto Core/);\n"; 
       print TBFILE "__PACKAGE__->table('$table_name');\n"; 
       print TBFILE "__PACKAGE__->add_columns(qw/" . join(' ', @names) . "/;\n"; 
       print TBFILE "__PACKAGE__->set_primary_key('$primary_key');\n\n" unless($primary_key eq ''); 
       print TBFILE "1;"; 
       close(TBFILE); 
      } 
    } 
} 
3

Demostrar manipulación de datos complejos con un chiste, como análisis de un registro del servidor web y para los errores 404, y luego otro oneliner para eliminar los enlaces rotos de una colección de documentos HTML ...

enseñé un taller de Perl para un grupo de administradores de sistemas de larga data una vez, y vieron el mayor valor cuando vieron cómo podían usar trucos de programación reales como modularización y estructuras de datos para mejorar sus scripts de shell, de una manera que tuviera continuidad con lo que ya sabia. En un entorno Windows demostraría manipular estructuras de archivos grandes, permisos y el Registro, porque todo el mundo siempre necesita ese tipo de cosas y Perl es mucho más robusto que los archivos por lotes, etc.

0

En el lado frívolo y entretenida, la entrada de Damian Conway en el tercer concurso Perl ofuscado, SELFgol realizaron 4 tareas

* Its a quine (when executed, prints an exact copy of itself) 
* Turns other programs into quines 
* Plays Conway's Game of Life 
* Animates a marquee banner 

Y todo esto en menos de 1000 caracteres. Bastante entretenido.

6

, tras mostrarles search.cpan.org (y explicar el concepto de CPAN), mostrarles algo de lo siguiente:

luego soplar sus mentes con una especie/mapa/grep combo (también conocido como Schwarzian Transform) que hace más trabajo en 1 línea de código que en 50 líneas de C#.

Muéstrales threads y forks, luego compáralos con el mismo código necesario para realizar el mismo trabajo en Java o C#.

Si no se sorprenden por el hecho de que Perl ha tenido durante años las mismas expresiones idiomáticas que C# es que acaba de introducirse, entonces no sé qué decir.

+0

+1 por hacerme descubrir Imager. –

+0

Pareces estar atacando C# mucho. Schwartzian Transform en 1 línea de C# con LINQ (esto es para archivos): files.Sort ((x, y) => GetDate (x) .CompareTo (GetDate (y))); Temas que acaba de utilizar System.Threading, que proporciona cantidades similares de código para hacer lo mismo que los hilos de perl, o simplemente utiliza constructores como delegados con su método BeginInvoke() o (ahora en C# 4) la biblioteca de tareas y controles de alto nivel como Parallel.For() et al para reducir el código necesita debajo del manejo manual de hilos. Espero que Perl haya tenido estas funciones más tiempo que C#, considerando que Perl tiene 22 años y C# solamente 8. –

+1

@Callum Rogers: El punto de JDrago es que C# no tenía estas características inicialmente, mientras que Perl las tenía hace 15 años. El propósito es probablemente molestar a los Lispers entre nosotros. – reinierpost

1

primer pensamiento: App::Asciio (see a screencast)

Segundo pensamiento: Es difícil hacer una demostración cosas sin un caso pequeño y compacto. En lugar de inventarlos, puede pedir prestado a otros para mostrar la elegancia de Perl.

Una opción serían las soluciones para los juegos de scripting de Microsoft. Jan Dubois de ActiveState proporcionó solutions with commentary que podría usar/adaptar. (Personalmente, descubrí que muchas de mis soluciones tomaban menos código, por lo que es posible que desee editarlas y hacer que Perl parezca aún más elegante.)

Otra opción podría estar en algunos de Randal Schwartz's columns. Hay algunas gemas allí. (Por ejemplo, Fingering myself with Twitter)

En cuanto a las aplicaciones, Perl::Critic es bastante sorprendente. Como es ack.

0

Si usted está en un centro de TI, es probable que tenga un número de ordenadores alrededor ... mini computers, mainframes, PCs, etc.

¿Qué tal un guión que sale y se pone algún tipo de información sobre estas máquinas, que su gente de TI necesita, y lo sirven bien en algún formato HTML.

Hace mucho tiempo, tenía 15 servidores basados ​​en TCP/IP que hacían algo para varios clientes. Armado un script de Perl que extrajo los parámetros para cada uno de los servidores, y insertó esta información en una nueva hoja de cálculo de Excel, una pestaña por servidor. Luego lo puso en un servidor de archivos en algún lugar donde todos podrían examinarlo. Ahorró mucho tiempo para las personas que estaban apoyando los servidores.

Mire a su alrededor en busca de una situación en la que pueda hacerles la vida más fácil al reducir el trabajo pesado manual. Creo que esa es tu mejor apuesta.

0

Dado que la mayoría de los lenguajes de programación son bastante comparables en el nivel ¿cómo-rápidamente-se puede-implementar-algo, tal vez podría "sorprenderlos" con la solidez y la valía de la plataforma Perl? Aquí están some interesting statistics sobre qué tan bien probados están los módulos de distribución Perl y CPAN. El CPAN es una creación increíble también, con sus sitios web asociados de documentación, búsqueda, revisión, anotación y seguimiento de errores. CPAN Testers es definitivamente la guinda del pastel: una colección de probadores en múltiples plataformas y versiones de Perl.

4

Siempre digo lo mismo, pero para mostrar a las personas la utilidad de CPAN, les presentaría el problema de analizar texto en inglés en sus oraciones componentes.

Un público inteligente presentado con ese problema probablemente dirá "Simplemente divídame en un punto". A continuación, comenzarán a presentarse casos de borde y problemas. Las paradas completas aparecen en todo tipo de otros lugares; las oraciones terminan con signos de interrogación y exclamaciones y tres puntos finales finales ... ¿Qué pasa con el punto final o! o? seguido de espacio, no, pero eso no funcionará porque podría ser seguido por EOF, etc. etc.

Si prepara un texto complicado con todos los casos de borde, podrá derribar todo sus soluciones propuestas simplemente señalando un ejemplo. Luego lo analizará con Lingua :: En :: Sentence.

No es llamativo en el sentido que podría significar, pero muestra el poder de un módulo escrito por personas que han pasado por todos los problemas que recién ahora le están ocurriendo a su audiencia, y los resolvió.

+0

En realidad, si se produce una elipsis al final de una oración, se supone que tiene cuatro paradas completas ... Tres es para ... elipsis interna de la oración. – jcdyer

0

Mis módulos Acme favoritos son Acme :: Eyedrops y Acme :: Bleach. Bueno para el alivio de la luz.

1

La mayoría de las respuestas aquí no creo que realmente vayan a sorprender a nadie, especialmente a un público de tecnología. Pueden sorprenderse de que Perl pueda hacerlo, pero no van a sorprenderse de que pueda hacer la tarea. Sin embargo, incluso si no les sorprende que pueda hacerlo, se sorprenderán de la rapidez o la poca cantidad de código que puede lograr.

Si está buscando cosas que les sorprendan, tienen que descubrir lo que piensan que es difícil en sus trabajos y ver si Perl podría hacerlo realmente fácil. Encuentro que a las personas no les importa si un idioma puede hacer algo que ya no les interesa. Dicho esto, impresionar a cualquiera con Perl es lo mismo que impresionar a cualquier persona en cualquier otro tema: debes conocerlos. y por lo que quedarán impresionados. Tienes que conocer a tu audiencia

Perl realmente no tiene ninguna característica especial que le permita hacer algo que cualquier otro idioma también puede hacer. Sin embargo, Perl combina muchas características que generalmente no encuentras en el mismo lenguaje de programación.

La mayor parte de las cosas que me impresionó tienen casi nada que ver con el lenguaje:

  • Hay una sola base de código que se ejecuta en un par de cientos de plataformas diferentes, a pesar de las diferencias en la arquitectura.

  • El CPAN de Perl todavía no tiene rival entre otros idiomas (lo cual es realmente triste porque es muy fácil hacer lo mismo para otros idiomas).

  • La cultura de las pruebas realmente ha elevado el listón en la programación de Perl, y hay mucho trabajo que desencadena dependencias de plataforma, problemas de módulos cruzados, etc. sin que el desarrollador original tenga que hacer mucho.

3

Esto se hace en Perl para Win32 http://www.unix.gr/FLOSSeavesDrop.exe

Es una ayuda auditoría pantalla remota. Ejecútelo en una PC con Windows, y luego puede monitorear su pantalla principal con solo un navegador web. Dirigirse a su navegador en la IP de la PC en el puerto 42000

Cuestiones relacionadas