Xdebug para PHP, Netbeans y Apache

En este breve post voy a explicarles como utilizar de forma sencilla xdebug para PHP, utilizando google chrome como navegador, Netbeans como IDE y Apache como Web Server. Para este ejemplo yo uso Ubuntu 11.04 pero debe funcionar en cualquier otro sistema con sus obvias modificaciones.


Lo primero que tenemos que hacer es configurar nuestro servidor web, para ello tenemos que instalar xdebug para PHP, configurar nuestro php.ini y reiniciar apache, en una terminal de Ubuntu escribiremos esto.

sudo aptitude install php5-xdebug

Ahora editaremos php.ini el cual normalmente lo encontramos en /etc/php5/apache2/

sudo nano php.ini

Y agregaremos lo siguiente al final del archivo.

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"

xdebug.remote_enable=on

xdebug.remote_handler=dbgp

xdebug.remote_host=localhost

xdebug.remote_port=9000

Ahora si, reiniciaremos nuestro apache.

sudo /etc/init.d/apache2 restart

Y con el siguiente parametro probaremos la configuración.

php -v

Este comando nos desplegara la informacion de nuestro PHP, lo mas importante es que entre esta info venga la siguiente sección:

with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

También podemos revisar la configuración usando phpinfo, la imagen superior nos muestra lo que debes ver en pantalla. Con esto ya tenemos configurado nuestro servidor, ahora instalaremos en Google Chrome el complemento Xdebug Helper:

https://chrome.google.com/webstore/detail/eadndfjplgieldjbigjakmdgkmoaaaoc

Ahora simplemente debemos ir a la sección de extensiones de Chrome y configurar nuestra nueva extensión, tenemos que especificar que usamos Netbeans y la ip de nuestro server que en este caso probablemente es localhost.
Para finalizar, simplemente debemos revisar que los datos de xdebug en la sección de opciones para PHP dentro de Netbeans esten correctos.
Listo, ahora ya puedes dispara un proyecto dentro de Netbeans y hacer debug paso a paso, saludos.

Instalar GIMP 2.7.2 en Ubuntu 10.10

Pues mucho se ha dicho acerca de la nueva “ventana unica” de GIMP que se supone fue liberada en version de prueba desde GIMP 2.7.1, sin embargo no era muy sencillo utilizarlo debido a que era necesario compilar la aplicacion debido a que por el momento solo esta disponible para su descarga el ejecutable de la 2.6, sin embargo como se que muchos de ustedes ya no pueden esperar, les traigo aqui la manera de instalar la version 2.7.2 de GIMP en Ubuntu 10.10 (Aunque no creo que usuarios de Ubuntu 9.x en adelante tengan problema), este metodo les instalara una version de desarrollo que puede ser inestable asi que usenlo bajo si propio riesgo, los pasos son los siguientes:

Primero tenemos que actualizar nuestros repositorios:

$ sudo apt-get update

No importa si tenemos GIMP instalado o no, agregaremos el siguiente PPA:

$ sudo add-apt-repository ppa:matthaeus123/mrw-gimp-svn

Actualizamos de nuevo:

$ sudo apt-get update

Y ahora si instalamos o actualizamos GIMP:

$ sudo apt-get install gimp

Si al iniciar Gimp te da algun problema, ejecuta:

$ sudo apt-get install libgegl-0.0-0

Listo simplemente falta abrir GIMP y navegar al menu Ventanas > Single Window-Mode y podran disfrutar de GIMP en una sola ventana, saludos…

Acerca de los Sitemaps

Como ya hemos platicado antes, los sitemaps son archivos xml que permiten a los motores de busqueda indexar mas facilmente nuestros sitios web, la verdad es, que aunque el tema no es muy complejo la mayoria tenemos aun algunas cosas por aprender acerca de los sitemaps, para esto les traigo los puntos mas importantes acerca de ellos:

¿Que es un sitemap?

Un sitemap es un archivo XML el cual es utilizado por los motores de busqueda para indexar mas facilmente un sitio web, basicamente el archivo contiene una lista con todas las url de un sitio web, el sitio web http://www.sitemaps.org contiene informacion muy importante acerca de los sitemaps y su formato.

¿Como se usan los sitemaps?

Cuando un motor de busqueda esta indexando un sitio web y esncuentra un archivo sitemap, este es usado para ayudar en la indexacion del sitio web, tambien es posible enviar manualmente un sitemap a los motores de busqueda, es posible hacerlo mediante un “ping” y con herramientas como Google Webmaster Tools.

¿Tengo que reenviar mi sitemap cada vez que actualizo mi sitio web?

Los motores de busqueda verificaran tus sitemaps regularmente, sin embargo, si es recomendable reenviar un sitemap despues de actualizar un sitio web.

¿Existe alguna regla sobre el nombre del sitemap?

No, el sitemap se puede nombrar como sea, ni siquiera es necesario que tenga extension xml, sin embargo debes asegurarte de que el tipo de archivo (mime type) sea correcto, debe ser “text/xml”.

Sitemaps y robots.txt

Es posible usar el archivo robots.txt para informar a los motores de busqueda donde se encuentra tu sitemap, simplemente agregaremos una linea extra dentro de nuestro archivo robots.txt como la siguiente:

Sitemap: http://www.example.com/sitemap.xml

Sitemaps y Google

Google cuenta con un servicio llamado Google Webmaster Tools el cual permite dar de alta sitemaps y ademas nos da algunas estadisticas de las paginas enviadas contra las indexadas entre otras cosas.

¿Necesito una cuenta de Google para enviar mis sitemaps?

No necesariamente, sin embargo es muy recomendable el uso de Webmaster Tools, en caso de que no tengas cuenta con Google puedes usar el servicio de ping para enviar un sitemap.

¿Cual es el tamaño maximo de un sitemap en Google?

Un sitemap puede contener hasta 50,000 direcciones o pesar 10 MB, sin embargo es posible dividir tu sitio en varios sitemaps mas pequeños que administren seccion del sitio web.

¿Puedo usar un RSS como sitemap con Google?

Si, Google acepta RSS 2.0 y Atom 0.3 como sitemaps validos, sin embargo la idea de un sitemap es tener todas las paginas de un sitio web y no solo las ultimas 10 o 20.

¿Como puedo saber si un sitemap es correcto?

De nuevo la recomendacion es usar Webmaster Tools, cuando un sitemap es enviado mediante esta herramienta, Google te dira si es que existe algun error con el. Tambien es buena idea usar algun validador de XML para revisar la estructura del sitemap.

Los mensajes de error mas frecuentes son los siguientes:

“This url is not allowed for a sitemap at this location”

Este error indica que tu sitemap contiene url’s no validas para su contexto, es decir, un sitemap solo puede contener url’s dentro del mismo dominio y dentro del mismo directorio(o subdirectorios del directorio), un sitemap ubicado en el directorio raiz podria contener todas las url’s del sitio pero un sitemap dentro de un directorio no podria contener url’s de nivel superior.

“Invalid date”

Este error indica que alguna de tus url’s contiene una fecha de modificaciòn invalida, los sitemaps requiren el uso de fechas en formanto ISO-8601 encoding el cual tiene 2 variantes, aunque para facilitar las cosas yo les recomiendo usar este formato:

2010-02-24 (YYYY-MM-DD)

“We couldn’t find your verification file.”

Cuando ligas un sitio web con Webmaster Tools, Google te pide que verifiques la propiedad del sitio, es importante que mantengas el metodo de verificacion activo para que Google verifique que sigues siendo el propietario del sitio web.

En caso de que aun tengan dudas les dejo estos sitios web de referencia:

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…

Fedora 14 y archivos RAR

Cuando instalas Fedora 14, no tienes por default soporte para archivos .rar, para esto existen los repositorios RPM Fusion’s YUM, esto nos ayudara a descomprimir archivos rar, simplemente abriremos una terminal y ejecutaremos los siguientes comandos para agregar los repositorios:

su -c “rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm”

su -c “rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm”

Ahora simplemente tenemos que instalar el paquete unrar desde la misma terminal o desde el gestor de aplicaciones de Fedora, para lo primero el siguiente comando servira:

su -c “yum install unrar”

Saludos

Fedora 14 y Meego

Bueno, este post solo lo pongo para evitar que muchos de ustedes se rompan la cabeza intentando hacer funcionar la interfaz grafica Meego con Fedora 14 (Como me paso a mi, jaja), desafortunadamente, aunque es una de las caracteristicas anunciadas por Meego para la liberaciòn de Fedora 14 la semana pasada, lamento informarles que no se pudo concluir con la tarea, por lo que la Meego aun no esta disponible (bueno, si esta, pero no funciona) para Fedora 14, de hecho ni siquiera es posible hacer un login exitosamente, se espera que en breve puedan corregir esta caracteristica y sera brindada a traves de las actualizaciones automaticas de Fedora, 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…