Topic: Desarrollo/Programación

JQuery: Manejadores de eventos y callbacks en OOP

Dos cosas basicas al momento de programar con JQuery son el usar diversos manejadores de eventos (event handler) y llamar funciones en repuesta a algo, los llamados callback, muchos son los usos que tenemos para estas 2 cosas, desde controlar clicks hasta realizar acciones en respuesta a un llamado ajax, esto es algo muy comun en JQuery, sin embargo, cuando estamos programando con objetos, debemos tener en cuenta como funciona el contexto dentro de JQuery.

Por ejemplo aqui tenemos un manejador de eventos muy simple:

google.load("jquery", "1");

function OnLoad(){
$('#content').html('Click aqui');
$('#content').click(function() {
alert('Manejador del evento .click()');
});
}

google.setOnLoadCallback(OnLoad);



Muy bien, este ejemplo fue muy sencillo y funciona en caso de que queramos usar funciones para manejar eventos, ahora, si en lugar de funciones quisieramos usar metodos de un objeto, probablemente intentariamos usar algo como esto:

google.load("jquery", "1");

function OnLoad(){
$('#content').html('Hola mundo');
c = new Class1();
$('#content').click(c.hi);
}

Class1 = function(){
this.text = "Hola";
this.hi = function() {
alert(this.text);
};
}

google.setOnLoadCallback(OnLoad);

Desafortunadamente este codigo no dara el resultado esperado, simplemente al dar click arrojara un alert que dice “undefined” y no el valor “Hola” que esperabamos, esto sucede debido a que el manejador de evento esta ligado al metodo de la clase en si y no al metodo de la instancia que creamos para este proposito, es decir, al activar el manejador del evento, el contexto ya no es el esperado…

Afortunadamente JQuery 1.4 ya tiene una solucion para este problema y es el uso de la funcion jQuery.proxy (ó $.proxy) la cual nos permite corregir esta perdida de contexto, uno de los usos de esta funcion consiste en enviar en el primer parametro el metodo que queremos disparar y en el segundo el objeto que sera utilisado como “this” cuando el metodo manejador sea disparado.

Este ejemplo debe funcionar correctamente:

google.load("jquery", "1");

function OnLoad(){
$('#content').html('Hola mundo');
c = new Class1();
$('#content').click($.proxy(c.hi, c));
}

Class1 = function(){
this.text = "Hola";
this.hi = function() {
alert(this.text);
};
}

google.setOnLoadCallback(OnLoad);

Esto funciona tanto para manejadores de eventos, como para callbacks, los ejemplos que tenemos aqui pueden ser probados en Google Code Playground, espero sea de ayuda… saludos

Usar un “Ping” para actualizar tu Sitemap en Google, Yahoo y Bing

Los sitemaps te ayudan a informar a los motores de busqueda cuales son las paginas que deben rastrear en tu sitio web, los sitemaps mejoran la manera en la que los motores de busqueda indexan un sitio web al dar informaciòn explicita acerca de un sitio web, por ejemplo, si existen url’s nuevas o si algunas han sido actualizadas.

Sabemos que no hay forma de garantizar si un sitio web sera indexado, o en que tiempo sera indexado, sin embargo el uso de sitemaps incrementa la probabilidad de ser indexado y tambien la velocidad de indexaciòn de un sitio web.




Cuando publicamos contenido nuevo en nustro sitio web o blog, seria una excelente idea poder avisar a los motores de busqueda lo mas pronto posible que nuestro sitio web ha sido actualizado y les tengo una excelente noticia, esto es posible mediante un metodo llamado “ping” el cual esta implementado en la mayoria de los motores de busqueda.

En este post nos enfocaremos en los 3 motores de busqueda principales y como realizar un ping de sitemaps a ellos, en los 3 casos es posible simplemente escribir la url en un navegador y al dar enter el sitemap sera enviado, en caso de que tengas control de tu aplicacion web podrias automatizar esto con algun curl o algo asi, las url de pings son las siguientes:

Bing:

http://www.bing.com/webmaster/ping.aspx?siteMap=[your sitemap web address].
Ejemplo para este sitio web:

http://www.bing.com/webmaster/ping.aspx?siteMap=http://blog.hectorbenitez.com/sitemap.xml

Google

http://www.google.com/webmasters/sitemaps/ping?sitemap=http://www.example.com/sitemap-file.xml

Ejemplo para este sitio web:

http://www.google.com/webmasters/sitemaps/ping?sitemap=http://blog.hectorbenitez.com/sitemap.xml

Yahoo

http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=YahooDemo&url=http://www.domain.com/sitemap.xml

Ejemplo para este sitio web:

http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=YahooDemo&url=http://blog.hectorbenitez.com/sitemap.xml

En todos los casos, no es estrictamente necesario reenviar los sitemaps cada vez que cambie tu sitio web ya que los buscadores actualizan automaticamente los sitemaps, sin embargo, es una buena recomendacion para tratar de que tus paginas sean indexadas mas rapidamente.

En WordPress podemos automatizar el envio de los sitemaps usando los servicios de actualizacion agregando las url en la seccion Ajustes->Escritura->Servicios de Actualizacion, existen otros muchos servicios a los que puedes hacer ping para informar que tu sitio web a sido actualizado como pingomatic, feedburner o technorati, pero esto sera material para otro post, Saludos…

Old password authentication with MySQL

MySQL a partir de su version 4.1 cambio la manera en la que almacena sus contraseñas, esto lo hizo para mejorar la seguridad, sin embargo, para mantener compatibilidad aun es posible manejar contraseñas con el viejo estilo, esto en muchos casos es transparente para los usuarios y los desarrolladores sin embargo, con el paso del tiempo algunos clientes evolucionan y dejan de permitir el manejo de cuentas con “old passwords” , por ejemplo, si tu trabajas con PHP 5.3+ MYSQLND -enabled PDO MySQL Driver, recibiras un error que dice:
mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.

SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file




Ademas de algunos warnings mas, segun el mensaje lo unico que tenemos que hacer es cambiar el password del usuario usando la funcion PASSWORD, o en caso de que uses phpMyAdmin dando a la contraseña compatibilidad con MySQL 4.1+, que es una opción al momento de cambiar una contraseña.

En caso de que esto no funcione es posible que tengas algun otro problema con tu servidor MySQL, algunos puntos que debes checar son los siguientes:

  • En la tabla mysql.user el campo password debe tener una longitud de 41, en caso de que tenga una longitud de 16 debes cambiarla, esto pasa generalmente en servidores que actualizaron desde una version anterior a 4.1.
  • Existe una variable de sistema llamada old_passwords que cambia el comportamiento de tu servidor y lo obligaria a siempre generar old passwords, existen 2 formas de comprobar si esta variable esta activa, la primera seria revisar las variables de MySQL (por ejemplo phpMyAdmin tiene un link a Variables en la pagina principal) o podrias ejecutar esto:
SELECT PASSWORD("Algo")

El resultado esperado debe ser una cadena de 41 caracteres de largo que comienza con un *, en caso de que te regrese una cadena de 16 caracteres de longitud quiere decir que old_passwords esta activa, ahora, para solucionar esto existen 3 posibles acciones, quitar del comando con el que se inicia MySQL el parametro –old-passwords, poner en OFF la variable old_passwords de tu archivo de configuracion o usar el comando SET GLOBAL para poner en FALSE la variable de sistema.

Mas informacion en el sitio de MySQL

Algunos reportes en el sitio de PHP

Saludos…

NETTUTS.com: Una introducción a Patrones de Diseño

En NETTUTS.com han posteado un nuevo tutorial que les dara una introducción a uno de los conceptos avanzados mas importantes en el desarrollo de aplicaciones: Los patrones de diseño.

Design patterns are optimized, reusable solutions to the programming problems that we encounter every day. A design pattern is not a class or a library that we can simply plug into our system; it’s much more than that. It is a template that has to be implemented in the correct situation. It’s not language-specific either. A good design pattern should be implementable in most – if not all – languages, depending on the capabilities of the language.

Ellos dan una pequeña introducción a algunos de los patrones de diseño mas utilizados, por ejemplo strategy, adapter, factory, decorator y singleton, cada uno viene con un poco de codigo ejemplo y nos hablan un poco de ¿En que casos deberia usarlo?.

NETTUTS.com: Como empezar a usar Facebook Connect, una guía rápida

Si tu eres uno de esos que han estado pensando en agregar autentificación a tu sitio web usando Facebook Connect, el sistema que ofrece Facebook pero no sabes por donde empezar, échale un ojo a este nuevo tutorial publicado en NETTUTS.com el cual tiene una muy buena guía de introducción.

Lately, there’s been quite a fuzz about lazy registration. It turns out that the less the user has to think, the higher the conversion rates are! What a thought! If everybody seems to have a Facebook profile, why not add a one-click user registration? I’ll show you how to do that today.

Esta guía nos ayudara a crear nuestra aplicación, que tablas necesitamos, un poco de permisos extendidos e incluso nos mostrar como enviar algo al perfil del usuario una vez que se haya conectado, sin duda un buen punto de partida.

phpDevelopment Blog: Zend Framework Tutorial Series: Part 1 – The Module Based Application

En el blog phpDevelopment(phpdev.ro) recientemente postearon la primera parte de una nueva serie de artículos que hablan sobre como crear una aplicación modular basada en Zend Framework. En esta primera parte nos hablan sobre la estructura de la aplicación.

In this first article of the series, we will discuss about the best way (in my oppinion) to structure your Zend Application in order to have maximum flexibility but also a good defined structure of the classes/files.

Si quieren empezar de inmediato pueden descargar el código fuente completo desde aquí o pueden seguir progresivamente la serie según salgan los nuevos artículos.

Rob Allen’s Blog: Nuevo tutorial de Zend_Auth

Rob Allen tiene un nuevo articulo en su blog en el cual actualiza por completo su tutorial de Zend_Auth, una introducción al componente de autentificación del Zend Framework.

After too many months of neglect, I have completely rewritten my Zend_Auth tutorial so that it is compatible with Zend Framework 1.10! As an experiment, I have written it directly in HTML, rather than PDF as before and cover the login form along with the login controller code required to authenticate a user using a database table. For good measure, I’ve included logging out and a view helper to show how to access the logged in user’s details.

Este tutorial nos guía a través de la creación de una tabla de usuarios, un controller con formulario y el código necesario para validar al usuario con la información de la tabla, también se incluye un link para descargar el código fuente en un archivo zip.

php|architect: Genera documentos de Word con PHP, PHPDOCX

En el blog de php|architect tienen un nuevo articulo acerca de una herramienta que nos ayudara a crear documentos de Word directamente desde nuestras aplicaciones PHP - PHPDOCX.

PHPDOCX is a PHP library that allows its client code to generate Microsoft Word documents in the .docx format from PHP scripts. PHP is increasingly being used for disparate goals and has to deal with data that comes from strange sources and has to be produced in stranger formats. [...] Starting with the 1.5 version, which has been released on July 12th, PHPDOCX is now compatible with PHP 5.3. The adoption of PHP 5.3 from operating systems is growing and it will at last replace the previous versions of PHP also in the servers of hosting providers.

En este articulo se mencionan las caracteristicas que se incluyen, asi como los requisitos para que esta herramienta funcione como lo son las extenciones zipxsl.

Netbeans y Zend Framework, primeros pasos

Pues ya tiene algún tiempo que salió la versión 6.9 de Netbeans con soporte para el Zend Framework incluido, en esta ocasión vamos a comenzar a utilizarlo de una forma básica, al menos vamos a crear nuestro primer proyecto basado en Zend Framework y lo comenzaremos a utilizar…

Lo primero que tenemos que hacer es descargar el Zend Framework, tenemos que tomar de ahí la carpeta bin, esta carpeta necesitamos tenerla en una ubicación fija ya que esto es la base del soporte de Netbeans a Zend Framework.

En Netbeans abriremos opciones (Tools -> Options) e iremos a la parte de PHP, ahí llegaremos pestaña de Zend y en el campo que dice Zend Script navegaremos hasta la carpeta bin que mencionamos antes y elegiremos el archivo .bat para windows o el .sh para linux (En caso de que el path este registrado en el sistema Netbeans lo puede encontrar por si solo), en caso de que la versión sea mayor a 1.10 daremos click en el boton “Registrar proveedor”, con esto ya tenemos Netbeans listo para trabajar con Zend Framework.
Continue »

Un sitio estático con WordPress

WordPress es una herramienta muy poderosa que cada día esta tomando mas fuerza dentro del desarrollo web, cada día mas blogs se levantan sobre esta plataforma pero también cada día mas sitios web estáticos lo hacen, esto es debido a la facilidad que presenta WordPress para ser usado como un CMS, es muy sencillo en este momento cambiar la pagina principal de WordPress para que muestre una pagina estática en lugar de una pagina con entradas, después de esto tu puedes crear todas las paginas que sean necesarias para tener un sitio completo, ademas con todo lo que aportan los plugins no sera difícil complementar tu sitio web por completo.

Ademas de todo esto muchos freelancer lo aprovechan para agilizar el proceso de actualización de tus sitios web, existen ocasiones en las que abrir un editor de texto y usar un FTP para actualizar tan solo la quinta palabra del tercer párrafo de una pagina del sitio.

¿Que necesitan para hacer esto? Pues aqui les dejo las principales recomendaciones que yo puedo hacerles para que logren tener un sitio web profesional usando la plataforma WordPress.

  1. El primer paso es cambiar la pagina principal del sitio web para que no muestre entradas y muestre una pagina fija.
  2. Después de esto lo que sigue es trabajar en el diseño del sitio web, existen muchos templates que puedes usar como base para tus diseños, obviamente es mucho mejor si tienes conocimientos acerca de como se crean los templates para WP, es importante saber que las paginas se basan en “page.php” aunque es posible crear templates individuales para cada pagina de tu sitio web.
  3. Lo siguiente es elegir los plugins, los puntos principales que yo recomiendo son los siguientes: SEO, Cache, Widgets para el sidebar, Sitemaps, Estadísticas del sitio, probablemente algo de formas de contacto.
  4. Finalmente, si el sitio es para algun cliente y estas pensando en dejar que el actualice el contenido por si solo, algún plugin como Ryans Simple CMS te permitirá bloquear áreas de configuración que el cliente no ocupa y solo tendrá permisos de editor para modificar contenidos.

En fin esto solo es una breve introducción, existen muchos temas que desarrollar y muchas áreas que explorar, por lo pronto los dejo iniciando y recuerden que si tienen alguna duda pues aquí estamos para apoyar en lo que se pueda, saludos…