De Semántica

Julio 19, 2010

Leía hoy la noticia que Google ha comprado MetaWeb, la compañía que ha desarrollado Freebase, una base de información que contiene y relaciona datos de personas, lugares y cosas de forma estructurada con el fin de proveer un punto de acceso a esta información de manera efectiva.

Es una gran noticia, en lo personal Google me parece una empresa que pone mucho énfasis en apoyar y empujar el desarrollo de nuevas tecnologías, basta con ver la apertura de su sistema operativo para móviles y el desarrollo constante de APIs para sus servicios, y su interés en Freebase demuestra que buscan trabajar y desarrollar nuevas aplicaciones en el área de la web semántica.

¿Qué se puede esperar de Google+Freebase? Es imposible decirlo, pero al menos a mí me gustaría que sirviera como habilitadora en el desarrollo de servicios centrados en información con semántica (significado), con la posibilidad de intercambiar conocimiento e interactuar entre distintos servicios, de Google y no de Google.

Habilitadora en el sentido que provee de herramientas para que la comunidad desarrolle las aplicaciones. Sin embargo, no estoy de acuerdo en muchos comentarios que leí en Twitter y algunos blogs que vaticinan expectantes nuevos servicios creados por los mismos de Google, como si estuviera sólo en las manos de esta compañía añadirle semántica a la información del internet.

Las herramientas, lenguajes y estándares para la Web Semántica ya están disponibles, “sólo” falta ponerlos en práctica para demostrar los beneficios de ofrecer la información de nuestros sitios y aplicaciones Web utilizando estas herramientas. Algunos ejemplos interesantes son: la apuesta de la BBC para el mundial de Sudáfrica 2010, utilizando una ontología para estructurar su información y generar estadísticas interesantes; la página de Newsweek que ya incluye en su código anotaciones RDFa para describir autores, citas, fuentes, etc.; y de los más interesantes, Facebook con su protocolo OpenGraph, que también utiliza anotaciones RDFa para describir y agregar meta-información a cualquier página Web para que ésta tenga la misma funcionalidad de una página de Facebook.

Como generalmente pasa con nuevos paradigmas, se necesita un proceso de adaptación, guerras de lenguajes y estándares y demostración de beneficios comerciales para las empresas. Sin embargo, lo importante a repetir aquí es que ya existen las herramientas para (entre otras cosas) estructurar nuestras bases de conocimiento[1], agregar desde ya información semántica a nuestros sitios Web[2], y describir cada porción de contenido con anotaciones[3 y 4], que muy probablemente resultará en mejores resultados en buscadores (aló SEOs), más significado a nuestro contenido, y mucha más interacción entre servicios y aplicaciones que van más allá de simples ‘mashups’ de contenido.

La verdad, esto suena bien, y seguramente será muy interesante!

Restringir acceso a una web con usuario y dirección IP usando .htaccess

Septiembre 4, 2008

Esta es una pequeña nota de un problema con el que me he topado el dia de hoy y antes de ponerme a duplicar páginas o a inventarme algunas lineas de código en PHP para restringir el acceso decidí investigar un poco como configurar el .htaccess para poder restringir el acceso a un directorio web y me encontre con una solucion fácil y sencilla.

La situación era esta. Necesitaba restringir el acceso a un directorio web de manera que si alguien accede a la URL desde la IP de la oficina le permita el acceso transparente, y si el acceso se realiza desde cualquiera de las IP no autorizada que solicite un usuario y una contraseña para poder acceder al contenido. Para poder lograr esta configuración el archivo .htaccess debe de estar alojado en la raíz del directorio que queremos (en este enlace encontraras más información sobre como habilitar el .htaccess)

El archivo .htacces queda de la siguiente forma:


AuthUserFile /var/www/website/subdir/.htpasswd
AuthName "Protected Site"
AuthType Basic
Require user usuario1 usuario2
Order allow,deny
Allow from xx.xx.xx.xx
Satisfy any

El truco esta en la instrucción “Satisfy any” que basicamente lo que hace es permitir el acceso al subdirectorio si se cumple al menos una de las condiciones que exigimos en el archivo .htaccess. Yo personalmente no lo conocía pero navegando un poco encontre la solución y la dejo aquí por si a alguien le hace falta o para futuras referencias propias, que siempre se me olvida como hacer este tipo de cosas.

(Howto restrict access to a website by IP and username using .htaccess)

¿Qué son las Rewrite Rules?

Abril 14, 2008

Son un conjunto de reglas que se valen de expresiones regulares para poder reescribir solicitudes de direcciones URL “on the fly” y de forma transparente. Son parte del módulo de Apache mod_rewrite y soportan un número ilimitado de condiciones utilizando variables e inclusio los “headers” HTTP para cambios avanzados de las direcciones URL.

En palabras más claras nos permiten reescribir la dirección URL utilizando patrones fáciles de entender para los humanos y haciendolos fáciles de indexar y convertirlos a peticiones que nuestra programación pueda entender. Este módulo es comunmente utilizado para poder usar las denominadas “Clean URL’s” (URL limpias) para hacerlas más lógicas, un ejemplo sería cuando el usuario ve esta URL http://www.dominio.com/buscar/termino y el mod_rewrite se encarga de convertir esa URL en http://www.dominio.com/cgi-bin/buscar.cgi?term=termino.

De esta forma para el usuario es fácil recordar esa URL ya que mantiene una sintaxis más clara de entender. Esta no pretende ser una guía muy extensa del mod_rewrite, si quieres ampliar información puedes verla en la Wikipedia y el sitio de Apache, así como las directivas de configuración.

Algunos usos prácticos de las rewrite rules

  • Permitir que las direcciones URL sean más amigables al usuario y los buscadores.
  • Prevenir el “hot linking” o que usen tus imagenes en otros sitios.
  • Esconder las direcciones web reales de tu servidor a los usuarios.
  • Redirigir de forma transparente las peticiones web.

Es una herramienta muy potente, y nos da muchísimas posibilidades de juego a costa de un pequeño incremento en la carga de procesamiento en el servidor, por lo que no es aconsejable el uso excesivo de estas.

Para habilitarlas es aconsejable hacerlo desde la raíz del servidor web, creando un archivo .htaccess con las siguientes cabeceras

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

Abajo de estas líneas ya pueden empezar a detallarse las reglas que necesitemos configurar.

Desde hace algún tiempo he estado utilizando estas herramientas y me han ayudado a mejorar mi sitio web, son muy fáciles de usar si tienes un mínimo conocimiento de expresiones regulares y de las cabeceras del Apache. Así que me gustaría explicar algunos problemas que me encontre y como los hemos resuelto usando las rewrite rules:

Rewrite rules para el uso de “Clean URL’s”

RewriteRule ^user/(.*)$ /mt/mt-cp.cgi?username=$1 [L]

Esta regla lo que hace es buscar la palabra user seguida de una “/” desde el inicio de linea, es decir, el primer caracter despues del dominio, por ejemplo

http://www.dominio.com/user/edeleon

Si la encuentra reenvía la petición al servidor Apache de la siguiente forma

http://www.dominio.com/mt/mt-cp.cgi?username=edeleon

Y el servidor devuelve al usuario la página sin cambiar la URL en el navegador del usuario. Al usar el flag [L] le decimos al mod_rewrite que esa es la última regla evitando así que las siguientes reglas puedan cambiar el resultado de la petición.

Rewrite rules para el uso de “Clean URL’s” utilizando los “headers HTTP”

RewriteCond %{HTTP_REFERER} www [OR]
RewriteCond %{HTTP_REFERER} docs
RewriteCond %{REQUEST_URI} /user/(.*[^/])
RewriteRule ^user/(.*)$ /mt/mt-cp.cgi?username=$1 [L]

En esta ocasión utilizamos el RewriteCond para condicionar la regla de tal forma que preguntamos si la petición viene de un sitio que contenga www O docs en el dominio Y si la URL contiene /user/ seguida de cualquier caracter que utilice el patrón de RewriteRule para reescribir la petición. Ojo a la forma de utilizar [OR] para que el operador acepte una condicion u otra, y si no lo usamos usa el operador “and” por defecto.

Rewrite Rule para redirigir la petición a otra URL

RewriteRule ^categoria/(.*)$ /category/$1 [R]

Esta regla es útil cuando necesitamos redirigir al usuario a una nueva URL, al usar el “flag” [R] estamos diciendo al mod_rewrite que fuerze la redirección, cambiando la URL en la barra del navegador del usuario y pasando todo el texto despues de “/” como parámetro a la nueva URL.

otra forma de hacer un redirect de forma fácil sería

Redirect permanent /rss/comentarios.xml http://feeds.feedburner.com/my_feef_url

Este ejemplo es práctico si usamos por ejemplo a feedburner como proveedor de nuestros RSS, al usar la directiva Redirect hacemos una redirección del tipo permanente a la nueva URL. De manera que podemos seguir usando nuestras propias direcciones para que los usuarios se subscriban y de ser necesario cambiarlas en el futuro poder hacerlo de forma transparente para el usuario y asi evitar links rotos.

Otros usos de las rewrite rules podrían ser redirigir a los usuarios dependiendo del lenguaje del navegador a la versión específica de nuestro sitio web más adecuada. O verificar el tipo de navegador y si detectamos que es un móvil poder enviar al usuario a la versión móvil de nuestro sitio web. Las posibilidades son infitinas, y espero poder ir contando otras formas curiosas para usar las rewrite rules.