• Publicidad

Proyecto NES

¿Estás desarrollando un proyecto, o piensas hacerlo? Pon aquí tu propuesta, lo más seguro es que alguien esté interesado en ayudarte.

Re: Proyecto NES

Notapor explorer » 2009-12-09 08:21 @389

Bienvenido a los foros de Perl en Español, Skriptke.

Lo primero, darte las gracias y la enhorabuena por desarrollar un proyecto de este calibre. Se agradece muchísimo, y, desde aquí, te apoyaremos en todo lo que podamos asesorar.

Lo segundo, decirte que en Perl ya existen algunos entornos de trabajo (frameworks) y sistemas de plantillas (templates) que siguen las indicaciones marcadas por tu NES: separar el código de programa de la presentación HTML. Incluso también separar la parte de acceso a base de datos, con lo que entonces disponemos de un auténtico paradigma MVC.

Lejos quedan los tiempos en que hacíamos cosas como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. print "Content-type: text/html\n\n";
  3. print "<html>\n";
  4. print "<body>\n";
  5. for ($i = 1; $i <= 10; $i++) {
  6.     print "<p>Valor de i: $i</p>\n";
  7. }
  8. print <<'EOL';
  9. <hr>
  10. <a href="http://perlenespanol.com/">Ir a Perl en Espa&ntilde;ol</a>
  11. </html>
  12. </body>
  13. EOL
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Un auténtico lío para la persona que lo iba a mantener, al mezclar código Perl y HTML. Vamos, como el PHP de hace años :lol:

Hace más de 10 años que salió el módulo CGI, y desde entonces, las cosas se han aliviado bastante:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use CGI qw(:standard);
  3. use HTML::Entities;
  4.  
  5. my $salida;
  6. for my $i (1 .. 10) {
  7.     $salida .= p("Valor de i: $i") . "\n";
  8. }
  9.  
  10. print
  11.     header,
  12.     start_html('Prueba'),
  13.     $salida,
  14.     hr,
  15.     a({-href => 'http://perlenespanol.com/'}, encode_entities('Ir a Perl en Español')),
  16.     end_html,
  17.     ;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

que, aunque facilita mucho más la claridad y mantenimiento del código, al esconder la generación de HTML en forma de llamadas a funciones, siguen existiendo partes que a veces requieren un gran trabajo: observa cómo de largo es crear un enlace de tipo 'a', incluyendo la llamada a una función externa para conseguir que nos escape la letra 'ñ' (si no hubiera esa letra ahí, no sería necesario, claro).

Y casi al mismo tiempo salieron los sistemas de plantillas, que separaron definitivamente ambos mundos. Primero la parte de HTML:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
<!DOCTYPE html
   PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Prueba</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<!-- TMPL_VAR NAME="SALIDA" -->
<hr />
<a href="http://perlenespanol.com/">Ir a Perl en Espa&ntilde;ol</a>
</body>
</html>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Y luego la parte de programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use CGI qw(:standard);
  3. use HTML::Template;
  4.  
  5. my $salida;
  6. for my $i (1 .. 10) {
  7.     $salida .= p("Valor de i: $i") . "\n";
  8. }
  9.  
  10. my $plantilla = HTML::Template->new(filename => 'plantilla.html');
  11. $plantilla->param(SALIDA => $salida);
  12.  
  13. print
  14.     header,
  15.     $plantilla->output,
  16.     ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En este caso vemos que seguimos necesitando la ayuda de CGI para seguir generando código HTML, pero si se da el caso de que lo que queremos generar es muy sencillo, pues el sistema de plantillas lo puede realizar completamente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
<!DOCTYPE html
   PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Prueba</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<!-- TMPL_LOOP NAME="PARRAFOS" --><p>Valor de i: <!-- TMPL_VAR NAME="SALIDA" --></p>
<!-- /TMPL_LOOP --><hr />
<a href="http://perlenespanol.com/">Ir a Perl en Espa&ntilde;ol</a>
</body>
</html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use HTML::Template;
  3.  
  4. my @parrafos;
  5. for my $i (1 .. 10) {
  6.     push @parrafos, { SALIDA => $i };
  7. }
  8.  
  9. my $plantilla = HTML::Template->new(filename => 'plantilla.html');
  10. $plantilla->param(PARRAFOS => \@parrafos);
  11.  
  12. print
  13.     header,
  14.     $plantilla->output,
  15.     ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La salida es la misma en todos los casos, solo que ahora todo el trabajo de generación de HTML recae en la plantilla, y desde el programa solo tenemos que enviar la información a mostrar.

Hoy en día contamos con poderosos entornos de trabajo, como Catalyst, de calidad empresarial, que ofrece una separación completa entre el programa, el diseño, y los datos. Una curva de aprendizaje muy fuerte, al principio, pero de resultados espectaculares en muy poco tiempo.

Te animo a que sigas con tu proyecto, pues seguro que tiene que aportar nuevas ideas que el resto no tiene.

En cuanto a la publicación de código, los perleros más famosos se han pasado todos a github.com, como sitio de trabajo, hasta disponer de algo presentable, antes de subirlo todo a CPAN, que es el lugar que le corresponde estar a todo buen software de Perl.

¡Ánimo!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Proyecto NES

Notapor explorer » 2009-12-09 11:32 @522

Bueno, lo de aprendizaje cero, no es tal: todos los sistemas de plantillas requieren de un periodo de aprendizaje de las marcas o forma de colocar las marcas o de integrar código.

El sistema que utilizas me recuerda un poco a ePerl o Mason, aunque el sistema de acceso a las variables es muy parecido al que usa Template::Toolkit, que es el más utilizado luego en los entornos de trabajo web.

Tiene lo tuyo algunas cosas muy interesantes, como lo de ofuscar los campos de formulario, o la creación de catpcha.

Lo de ofuscar el botón de enviar no lo entiendo tanto, salvo que quieras tener un control de sesiones o algo así.

Por lo que veo, me gusta. Lo único que te diría es que los sistemas de plantillas Perl que existen hoy en día, como buscan más y más notoriedad, acaban sacando módulos complementos para que su sistema sea usado por los frameworks más poderosos, como por ejemplo Catalyst::View::TT, y así, ganar más cuota de mercado (o de fama).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Proyecto NES

Notapor explorer » 2009-12-18 14:47 @658

Yo creo que las rutas relativas indicadas dentro de las plantillas, deben ser relativas a la posición que ocupa esa plantilla.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Proyectos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados