links for 2007-03-29

| |

Laboratorio: no permitir que accedan directamente a las urls empleadas en Ajax

Cuando usamos Ajax en nuestras aplicaciones solemos usar un script específico que devuelva los datos preparados para que el cliente los interprete y los muestre.

En algunas ocasiones no suele ser de nuestro agrado que usuarios accedan directamente a las URLs empleadas para Ajax.

Para evitar esta situación se puede usar un script sencillo. Se tomará en cuenta el valor de la variable de entorno HTTP_REFERER, la cual nos devuelve desde qué página se accede a nuestro script.

$ref = getenv('HTTP_REFERER');

Si el contenido de esta variable es false entonces es que se ha accedido directamente desde el navegador, si no, es que se accede desde una página, también habrá que comprobar que la página es la que nosotros queremos.

<?php
$ref = getenv('HTTP_REFERER');
if (!$ref || $ref != '[nuestra url]') {
?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"xhtml1-transitional.dtd">
<html>
<head>
<title>Sentido Web - Redireccionamiento Ajax</title>
</head>
<body>
<h1>Sentido Web - Redireccionamiento Ajax</h1>
<p><?php echo "Hola, son las ".date("H:i:s"); ?></p>
</body>
</html>
<?php
} else {
echo "Hola, son las ".date("H:i:s");
}
?>

En este caso mostraremos una página cuando no haya referer o no sea el que nosotros esperamos. También se podría hacer para que el referer estuviera en el servidor, pero eso lo dejo para que lo haga el que lo necesita.

Una funcionalidad parecida se podría usar por temas de accesibilidad, dependiendo de un parámetro que indique si se trata de una llamada Ajax o no, se devuelva la información para el script del cliente o se muestre la información en una página.

<a href="url-ajax.php" onclick="ajax('url-ajax.php?ajax=1')">Enlace</a>

En el caso de haber problemas de accesibilidad, el enlace accede a la página con la información. En caso contrario, ejecuta la funciona ajax(), indicándole que se trata de una llamada Ajax para que nos devuelva la información formateada, ya sea en XML o JSON o como queramos.

| |

Usar polimorfismo en PHP5 para acceder a diferentes BD

Gracias al tratamiento de objetos que nos permite PHP5, es posible diseñar aplicaciones de una forma más eficiente. Un caso de ello es el polimorfismo, lo cual va a permitir acceder y trabajar con diferentes tipos de bases de datos de una forma única.
En el artículo en el que hacemos referencia, explican detalladamente cómo usar el polimorfismo para acceder a datos mediante MySQL y SQLite. Para ello se crearán una clase abstracta y dos clases que extenderán de esta, siendo cada una de estas las encargadas de tratar el acceso a MySQL o a SQLite.
Después se deberá crear una clase que maneje estas clases, dependiendo de un parámetro, se usará una de las clases (MySQL o SQLite). Esta última clase será la que instancie el usuario final, por lo que para él será transparente el tratamiento que se haga de una u otra base de datos.
Algo que también destacaría de este artículo es la forma de no hacerlo, algo que me he encontrado en alguna ocasión en Java (donde hay polimorfismo desde siempre). La forma incorrecta de hacerlo es creando una única clase y diferenciando en cada método diferentes códigos dependiendo de si se trata de una BD u otra.
Abstracting Database Access Using Polymorphism with Objects in PHP 5

links for 2007-03-28

Arrays en Javascript

Ahora que está tan de moda el Ajax, el JSON, que requieren un conocimiento un poco avanzado de Javascript, nos olvidamos de tener una buen base para luego no tener dificultades cuando realizamos nuestras aplicaciones clientes.
Aunque inicialmente Javascript no admitía arrays, su uso es una de las características más necesitadas. Por experiencia he comprobado que algunas personas solo conocen su funcionalidad más común, por lo que no estaría mal que le echaran un vistazo a este manual sobre arrays en Javascript, el cual es bastante completo.
A parte de los métodos que admiten y su funcionamiento, destacaría dos partes: la primera es que los arrays se tratan por referencia, no por valor; la segunda parte es el inclusión mediante prototype de otros métodos, como ordenamiento de forma númerica y encontrar valores entre otros.
Mastering Javascript Arrays
Vía / dzone

Citizendium: la competencia de Wikipedia

citizendium.pngCitizendium nace como la competencia de la Wikipedia, aunque yo más diría que se trata de otro gran punto de información. Siguiendo la misma filosofía que la Wikipedia y creada por un fundador de esta, Citizendium pretende ser más estricta que la Wikipedia ya que requerirá registro con nombre real y los artículos serán llevados por un junta editorial.
Usando el modelo wiki, quiere ofrecer una enciclopedia con un cierto toque de expertos. Por ahora han usado 1100 artículos de la Wikipedia que están refinando.
En estos momentos disponen de unos 820 autores y 186 editores. Los editores decidirán que versión de un artículo será la que se publique y cual necesita una revisión más académica.
Cada cual que se registre con su nombre real está invitado a participar en este proyecto, pero cada usuario estará controlado por una especie de “policía”, el cual deberá ser licenciado universitario.
Un buen proyecto que intenta evitar los problemas con los que se enfrenta la Wikipedia.
Citizendium
Vía / CNET News.com

links for 2007-03-27

MySQL Migration Toolkit

mysql.pngEl otro día nos preguntaban una forma de migrar una base de datos Access a otra MySQL. En ese momento no conocía ninguna aplicación que pudiera hacerlo, pero hoy me he enterado que los propios de MySQL tienen MySQL Migration Toolkit, que permite mediante una serie de pasos realizar una migración de forma correcta.
mysql_migration.png
Entre las base de datos que podemos migrar nos encontramos: Oracle, Microsoft SQL Server, Microsoft Access y otras. A parte reduce riesgos usando una metodología, ahorra costes incrementando la productividad, elimina días de trabajo de querys manuales, test y debug.
He visto también en en artículo desde el que hacemos referencia, que MySQL Workbench, del que hicimos referencia en su día, no está disponible para su descarga como lo estaba anteriormente, esperemos que sea porque anden mejorando este producto.
MySQL Migration Toolkit
Vía / Conexiones Razonables

Mejor técnica para herencia en Javascript

Muy buen artículo que nos explica paso a paso cómo conseguir implementar la herencia en Javascript. Aunque Javascript no es un lenguaje pensado en la orientación a objetos, últimamente debido al Ajax y a las librerías que van apareciendo, nos solemos encontrar con la necesidad de implementar OO en nuestras aplicaciones clientes y, en casos menos frecuentes, tratar el tema de la herencia en Javascript.
Este artículo nos explica desde el inicio de herencia entre clases, hasta los problemas con los que nos vamos encontrando. El problema más frecuente es cuando una clase llama a un método de la clase padre, si se usa this en la clase padre, usará la clase padre, y no la hija, que es lo que se supone que se espera que haga.
Otro problema que nos explica, es la necesidad de indicar cuál es la clase padre, para poder referenciarla. Si se especifica directamente, se puede solucionar el problema, pero si la estructura de clases es compleja, especificar en cada una de ellas cuál es el progenitor, nos encontramos con una estructura difícil de mantener.
A parte de resolvernos la realización de herencia entre clases en Javascript, este artículo nos enseña a resolver los problemas que nos podemos encontrar, ya que hubiera sido más sencillo darnos la solución, explicarla y listo, pero sin embargo lo que hace es ofrecer soluciones iniciales, ver que problemas representa y luego solucionarlos y pasar a otra versión mejorada.
También me gustaría destacar la explicación de los métodos call() y apply() que poseen las funciones en Javascript. Hay que tener en cuenta que en Javascript las funciones son tratadas como objetos, admiten propiedades y métodos. El método call() permite especificar el this utilizado, mientras que el método apply() el array de argumentos que se le pasa a la función.
Introducing the best Javascript Inheritance Technique

links for 2007-03-25