<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bosque Viejo &#187; web</title>
	<atom:link href="http://bosqueviejo.net/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://bosqueviejo.net</link>
	<description>Sitio web sobre programación, software libre, redes, servidores, ofimática... y todo lo relacionado con la informática que nos rodea</description>
	<lastBuildDate>Tue, 08 May 2012 14:40:56 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Perl::Critic, un crítico para tu código en Perl</title>
		<link>http://bosqueviejo.net/2011/07/30/perlcritic-un-critico-para-tu-codigo-en-perl/</link>
		<comments>http://bosqueviejo.net/2011/07/30/perlcritic-un-critico-para-tu-codigo-en-perl/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 05:00:45 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[buenas prácticas]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=779</guid>
		<description><![CDATA[ Echando un vistazo por Internet, topé con esta curiosa página, que tiene como misión criticar el código que hayas escrito en Perl, a través de las buenas prácticas escritas en el libro Perl Best Practices, de Damian Conway.
En la web se puede subir cualquier fichero, código en Perl, y el sistema internamente analiza el código conforme a las reglas específicas de un buen programador de Perl. Tiene cinco niveles de gravedad: gentle (gentil), stern (severo), harsh (duro), cruel y brutal.
Es un buen punto de inicio para refactorizar nuestro código, ya que lo adaptamos al uso de buenas prácticas y hacemos que el código deje de ser, tal y como catalogan a todos los códigos hechos en Perl, de tipo write-only (solo escritura).
El código de Perl::Critic está disponible también, como software libre (GPL), en CPAN, por lo que puede ser instalado de forma local para poder hacer las pruebas de código sin necesidad de subir código a la web.
A través del propio CPAN se puede descargar e instalar:

perl -MCPAN -e &#34;install Perl::Critic&#34;

En el fichero README nos da un ejemplo sencillo de como hacer el validador:

use Perl::Critic;
my $file = shift;
my $critic = Perl::Critic-&#62;new&#40;&#41;;
my @violations = $critic-&#62;critique&#40;$file&#41;;
print @violations;

Poniendo esto en un script [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/perl-critic-logo-150x150.gif" alt="" title="perl-critic-logo" width="150" height="150" class="alignleft size-thumbnail wp-image-789" /> Echando un vistazo por Internet, topé con <a href="http://perlcritic.com">esta curiosa página</a>, que tiene como misión criticar el código que hayas escrito en Perl, a través de las <a href="http://bosqueviejo.net/2011/07/29/buenas-practicas-en-perl/">buenas prácticas escritas en el libro Perl Best Practices, de Damian Conway</a>.</p>
<p>En la web se puede subir cualquier fichero, código en Perl, y el sistema internamente analiza el código conforme a las reglas específicas de un buen programador de Perl. Tiene cinco niveles de gravedad: gentle (gentil), stern (severo), harsh (duro), cruel y brutal.</p>
<p>Es un buen punto de inicio para refactorizar nuestro código, ya que lo adaptamos al uso de buenas prácticas y hacemos que el código deje de ser, tal y como catalogan a todos los códigos hechos en Perl, de tipo <em>write-only</em> (solo escritura).</p>
<p>El código de <a href="http://search.cpan.org/dist/Perl-Critic/">Perl::Critic está disponible</a> también, como software libre (GPL), en CPAN, por lo que puede ser instalado de forma local para poder hacer las pruebas de código sin necesidad de subir código a la web.</p>
<p>A través del propio CPAN se puede descargar e instalar:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">perl -MCPAN -e &quot;install Perl::Critic&quot;</pre></div></div>

<p>En el fichero README nos da un ejemplo sencillo de como hacer el validador:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">use</span> Perl<span style="color: #339933;">::</span><span style="color: #006600;">Critic</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$critic</span> <span style="color: #339933;">=</span> Perl<span style="color: #339933;">::</span><span style="color: #006600;">Critic</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@violations</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$critic</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">critique</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #0000ff;">@violations</span><span style="color: #339933;">;</span></pre></div></div>

<p>Poniendo esto en un script Perl, ya solo tendríamos que ejecutarlo pasando el nombre de fichero como parámetro que queramos comprobar. Sencillo, ¿no?</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/07/30/perlcritic-un-critico-para-tu-codigo-en-perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Cómo funciona el sistema web?</title>
		<link>http://bosqueviejo.net/2010/11/16/como-funciona-el-sistema-web/</link>
		<comments>http://bosqueviejo.net/2010/11/16/como-funciona-el-sistema-web/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 13:03:41 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[redes]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[navegador web]]></category>
		<category><![CDATA[uri]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=531</guid>
		<description><![CDATA[Hace ya tiempo escribí una entrada parecida basándome en el sistema de correo, hoy el tema que nos ocupa es la web. El sistema web es el medio más usado por todos los usuarios de Internet, constituyéndose como el sistema asociado por defecto a la idea preconcebida que se tiene sobre Internet: páginas web.
Conceptos
Antes de comenzar a entrar en el tema, vamos a definir algunos conceptos muy útiles y a tener en cuenta, para no perdernos. Es importante conocer estas palabras y el significado que conllevan para poder entender, a posteriori, cómo funciona el sistema web:

web: en inglés, telaraña, se refiere al entramado que se imagina cuando de una página se pasa a otra enlazándose entre sí todas ellas, formando una imagen como de telaraña, o web.
URL: Uniform Resource Locator, o lo que quiere decir como Localizador de Recurso Uniforme. En sí es la dirección completa de un recurso que se solicita a través de Internet (y más específicamente del protocolo HTTP). Este tiene la forma:
http://host:port/uri
 o
https://host:port/uri

URI: Uniform Resource Identifier, o Identificador de Recurso Uniforme. Lo que es la parte de la ruta dentro de la URL, como se había visto más arriba. La URI puede contener, a su vez, [...]]]></description>
			<content:encoded><![CDATA[<p>Hace ya tiempo escribí una entrada parecida basándome en <a href="http://bosqueviejo.net/2009/04/06/como-funciona-el-sistema-de-correo/">el sistema de correo</a>, hoy el tema que nos ocupa es la web. El sistema web es el medio más usado por todos los usuarios de Internet, constituyéndose como el sistema asociado por defecto a la idea preconcebida que se tiene sobre Internet: páginas web.</p>
<h3>Conceptos</h3>
<p>Antes de comenzar a entrar en el tema, vamos a definir algunos conceptos muy útiles y a tener en cuenta, para no perdernos. Es importante conocer estas palabras y el significado que conllevan para poder entender, a posteriori, cómo funciona el sistema web:</p>
<ul>
<li><strong>web</strong>: en inglés, <em>telaraña</em>, se refiere al entramado que se imagina cuando de una página se pasa a otra enlazándose entre sí todas ellas, formando una imagen como de <em>telaraña</em>, o web.</li>
<li><strong>URL</strong>: Uniform Resource Locator, o lo que quiere decir como Localizador de Recurso Uniforme. En sí es la dirección completa de un recurso que se solicita a través de Internet (y más específicamente del protocolo HTTP). Este tiene la forma:
<pre>http://host:port/uri</pre>
<p> o
<pre>https://host:port/uri</pre>
</li>
<li><strong>URI</strong>: Uniform Resource Identifier, o Identificador de Recurso Uniforme. Lo que es la parte de la ruta dentro de la URL, como se había visto más arriba. La URI puede contener, a su vez, particiones, que se indicarán con la barra inclinada (/) y zona de consulta, que comenzará con el signo de interrogación (?) y tendrá pares de clave valor separados entre sí por el signo de igualdad (=) y entre cada par por el símbolo del ampersand (&#038;):
<pre>/miruta/mifichero.ext?clave1=valor1&#038;clave2=valor2</pre>
</li>
<li><strong>Host</strong>: del inglés máquina. Se refiere al nombre del servidor donde se alberga la URI que se solicita. El nombre debe de ser un nombre que se pueda resolver vía DNS, pudiendo ser un conjunto de letras, símbolos (válidos: guión (-) y subrayado (_)) y números: www.midominio.com</li>
<li><strong>Port</strong>: o puerto. Es el número en el que <em>escucha</em> el servidor web. No hace falta indicarlo explícitamente, a menos que sea diferente del puerto estándar, que es el 80. Se indica en formato decimal.</li>
<li><strong>Servidor web</strong>: es el programa que se mantiene a la <em>escucha</em> para atender las peticiones de los navegadores, a modo de servir las páginas web. También puede ejecutar códigos para generar páginas, imágenes y otros contenidos para cada petición. Hay servidores de pago y gratuitos, y libres, algunos ejemplos de los más usados: Apache, Cherokee y Microsoft IIS.</li>
<li><strong>Navegador web</strong>: es una aplicación de escritorio que permite, dando una URL, visualizar una página web, escrita en lenguaje HTML. Los navegadores web tienen la posibilidad de emplear plugins de forma que puedan: reproducir vídeos, sistemas interactivos Java, Flash, Silverlight, &#8230;; reproducir audio, usar hojas de estilo, o código JavaScript&#8230;; algunos ejemplos de navegadores web más usados son: Google Chrome, Mozilla Firefox, Microsoft Internet Explorer, Opera y Safari.</li>
</li>
</ul>
<h3>Peticiones: modo Cliente/Servidor</h3>
<p>El sistema web se diseño para ser de modo cliente/servidor. Eso quiere decir que hay un elemento activo, en este caso el navegador web, que haría las veces de cliente, y un elemento pasivo, en este caso el servidor web, que haría las veces de servidor.</p>
<p>La dinámica siempre es la misma, el cliente realiza una conexión a través de la red para solicitar una página web, mediante una URL, y el servidor responde a esta URL con un mensaje en el que puede indicarle el contenido de lo solicitado (200 OK), que no encuentra la página (404 Not Found), que no tiene acceso a ese recurso (403 Forbidden), que necesite autenticarse antes (401 Authorization Required), que el recurso solicitado está en otra ubicación (302 Redirect), etc.</p>
<h3>Formato de las Peticiones</h3>
<p>Las peticiones pueden ser de varios tipos, pero básicamente, se nombran, para navegadores, dos: GET y POST. Cuando un cliente realiza una petición de URL de forma normal, esta se realiza siempre vía GET. En cambio, cuando se realiza mediante el envío de un formulario, presionando en el botón de tipo <em>submit</em> de una página web, este puede realizarse mediante POST (a menos que se explicite, en el propio código HTML, que se hará mediante GET u otro método que soporte el navegador web).</p>
<p>Por tanto, una petición se envía en formato texto, como sigue:</p>
<pre>
GET / HTTP/1.1
Host: www.google.es
User-Agent: Mozilla Firefox
Connection: close
</pre>
<p>La petición se divide en:</p>
<ul>
<li><strong>Primera línea</strong>: es en la que se especifica el método de solicitud, seguida por la URI, y por último el protocolo usado (normalmente HTTP/1.1).</li>
<li><strong>Cabeceras</strong>: es el espacio destinado a dar información al servidor sobre la solicitud. Las cabeceras son frases cortas de letras y guiones que terminan con los dos puntos (:), para dar lugar al valor de la clave. El <em>host</em> se indica siempre para informar al servidor del dominio al que queremos solicitar la página, así como el <em>user-agent</em>, en el que le informamos desde qué navegador (o tipo de navegador) estamos realizando la petición. En este <a href="http://www.calinsoft.com/2010/09/historia-de-la-cadena-de-identificacion-de-los-navegadores">enlace</a> se puede ver cómo se construyen los user-agent para cada navegador, y el porqué son tan largos.</li>
<li><strong>Cuerpo del mensaje</strong>: una petición de tipo GET no suele tener cuerpo de mensaje, por lo que no se especifica una cabecera de tipo <em>Content-lenght</em>, que indicaría que hay cuerpo de mensaje, y el tamaño del mismo. También se puede indicar que el contenido irá por trozos. Entre la línea de cabeceras y el cuerpo, se deja siempre una línea en blanco.</li>
</ul>
<h3>Formato de la respuesta</h3>
<p>La respuesta que emite el servidor viene formada por una serie de líneas de texto en las que se indica el protocolo en el que se responde (normalmente HTTP/1.1), seguido de tres dígitos, el código de retorno, y un texto informativo sobre el retorno.</p>
<p>Al igual que en el caso de la solicitud, se incluyen cabeceras, y el cuerpo de la respuesta, que está separado de las cabeceras por una línea en blanco. Un ejemplo:</p>
<pre>
HTTP/1.1 200 OK
Date: Tue, 16 Nov 2010 02:30:00 GMT
Server: Apache/2.2.9 (Debian)
Content-Length: 4
Content-Type: text/plain

hola
</pre>
<p>En este caso, como se puede ver, el servidor también responde informando de su <em>huella</em> (la cabecera <em>Server</em>), donde especifica el tipo de servidor que es. En este caso, la respuesta tiene cuerpo de mensaje, de 4 bytes y de tipo texto plano (en formato MIME: <em>text/plain</em>).</p>
<h3>Tipos de Respuestas</h3>
<p>Las respuestas que puede dar un servidor web pueden ser:</p>
<table>
<tr>
<th>código</th>
<th>tipo</th>
</tr>
<tr>
<th>1xx</th>
<td>respuesta temporal, el cliente seguirá esperando por una respuesta definitiva</td>
</tr>
<tr>
<th>2xx</th>
<td>respuesta correcta</td>
</tr>
<tr>
<th>3xx</th>
<td>redirección</td>
</tr>
<tr>
<th>4xx</th>
<td>error de cliente (por no tener autorización, no encontrase la página o similar)</td>
</tr>
<tr>
<th>5xx</th>
<td>error de servidor (por fallo en el sistema servidor, de código o similar)</td>
</tr>
</table>
<p>Para más información sobre los códigos se puede ver el <a href="http://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP">anexo de códigos HTTP</a> de la wikipedia.</p>
<h3>Cookies</h3>
<p>Debido a que el sistema web es lo que se conoce como <em>stateless</em>, es decir, que cada petición se realiza independientemente de las anteriores y siguientes, por lo que, en muchos sitios, para poder establecer una sesión o identificar a un usuario para poder usar sus preferencias preguardadas, o información sobre su navegación en nuestro sitio, se usan las <a href="http://es.wikipedia.org/wiki/Cookie#Ideas_equivocadas">polémicas cookies</a>.</p>
<p>Una cookie es un dato que indica el servidor para el cliente, que debe de almacenarlo y enviarlo cada vez, hasta que se cumpla el tiempo límite en el que expira. Por ejemplo:</p>
<pre>
HTTP/1.1 200 OK
...
Set-Cookie: name=value; expire=Tue, 16-Nov-2010 15:00:00 GMT; path=/; domain=www.google.es
...
</pre>
<p>Las cookies tienen 4 partes, </p>
<ul>
<li>la primera se establece el par <strong>clave-valor</strong>, esto quiere decir que se establece, como si de una variable se tratase, el nombre de la cookie, con el valor que contendrá,</li>
<li>la segunda es la <strong>expiración de la cookie</strong>, o caducidad. Pasada esa fecha, la cookie debe de ser destruida del navegador web para no volver a ser usada,</li>
<li><strong>la ruta</strong>, en la tercera posición, es la URI base de la que cuelga la cookie. Para tenerla como referencia en su uso, y solo enviar la cookie cuando la ruta base se cumpla en la URI solicitada.</li>
<li>por último, se especifica el <strong>dominio</strong> para el que se configura la cookie. Este debe de ser igual a la cabecera <em>host</em> enviado en la petición, a menos que haya cambiado de dominio.</li>
</ul>
<p>Una vez el servidor ha enviado esta información al navegador web, el navegador almacena (o solicita antes si se desea almacenar) dicha información como cookie, para reenviarla cada vez que se visite el dominio con la misma URI base. El navegador realiza las peticiones de la siguiente forma:</p>
<pre>
GET / HTTP/1.1
Host: www.google.es
Cookie: name=value
...
</pre>
<p>El tema de las cookies y la privacidad ha sido muy discutido y hay legislaciones (la de EEUU y Europa) que han incluido artículos para su regulación, ya que puede ser empleado como un medio para minar nuestra privacidad. Esto se puede leer de forma más amplia en <a href="http://es.wikipedia.org/wiki/Cookie#Privacidad_y_cookies_de_terceros">este enlace</a>.</p>
<h3>Conclusiones</h3>
<p>El protocolo HTTP, en el que se basa el sistema web, es el más usado en internet, junto con el correo electrónico. Con este artículo se pretende dar una visión un poco más a bajo nivel sobre cómo funciona dicho sistema, y se espera ampliar en un futuro con más artículos referentes a otros aspectos que conforman y completan al propio protocolo.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/11/16/como-funciona-el-sistema-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pretty URLs</title>
		<link>http://bosqueviejo.net/2010/04/27/pretty-urls/</link>
		<comments>http://bosqueviejo.net/2010/04/27/pretty-urls/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 12:17:18 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[redes]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=430</guid>
		<description><![CDATA[Muchas veces hemos visto las URL de algunos sitios que tienen, tras una interrogación de cierre (?) una hilera de valores con iguales (=) separados por ampersand (&#038;). No obstante, hay otros muchos sitios que sus URLs, más específicamente sus URIs, son palabras en minúscula, con algunos guiones y números escasos, separados por barras inclinadas (/). Este último método es conocido con pretty urls.
Tener este tipo de URLs, o URIs en nuestro dominio, se puede hacer mediante la creación de directorios y especificando los ficheros dentro de los mismos que tengan los nombres (sin extensión) que queremos que se visualicen en la barra del navegador&#8230; pero no es nada útil y es complejo, sobre todo cuando se usan entornos como WordPress o similares, donde el contenido de la base de datos dicta lo que aparece en la página, y es totalmente dinámico.
La solución que se puede emplear: rewrite. En Apache, a través del módulo mod_rewrite, se pueden crear reglas de redireccionado de modo que una URL que es:
http://midominio.com/?p=129&#038;a=crea-usuario
Se puede convertir en:
http://midominio.com/crea-usuario/129
En el caso concreto, tan solo bastaría con agregar un bloque de configuración como el siguiente:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)/([0-9]+)$    /index.php?p=$2&#038;a=$1

Para más información vea la [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces hemos visto las URL de algunos sitios que tienen, tras una interrogación de cierre (?) una hilera de valores con iguales (=) separados por ampersand (&#038;). No obstante, hay otros muchos sitios que sus URLs, más específicamente sus URIs, son palabras en minúscula, con algunos guiones y números escasos, separados por barras inclinadas (/). Este último método es conocido con <em>pretty urls</em>.</p>
<p>Tener este tipo de URLs, o URIs en nuestro dominio, se puede hacer mediante la creación de directorios y especificando los ficheros dentro de los mismos que tengan los nombres (sin extensión) que queremos que se visualicen en la barra del navegador&#8230; pero no es nada útil y es complejo, sobre todo cuando se usan entornos como WordPress o similares, donde el contenido de la base de datos dicta lo que aparece en la página, y es totalmente dinámico.</p>
<p>La solución que se puede emplear: rewrite. En Apache, a través del módulo <em>mod_rewrite</em>, se pueden crear reglas de redireccionado de modo que una URL que es:</p>
<pre>http://midominio.com/?p=129&#038;a=crea-usuario</pre>
<p>Se puede convertir en:</p>
<pre>http://midominio.com/crea-usuario/129</pre>
<p>En el caso concreto, tan solo bastaría con agregar un bloque de configuración como el siguiente:</p>
<pre>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)/([0-9]+)$    /index.php?p=$2&#038;a=$1
</pre>
<p>Para más información vea <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">la documentación oficial de Apache</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/04/27/pretty-urls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

