moochat Construyendo un chat usando mootools + php + mysql
December 21st, 2009
Dale aqui para ver el demo (solo internet explorer 6+)
Descargar codigo fuente

Antes de comenzar
Resulta que tengo unos dias libres entre 25 y 30 no estoy seguro y me propuse aprender algo de javascript porque tenia muy olvidada esa area de la web, navegando por la web lei mucho sobre algunos frameworks de javascript al parecer muy populares, jquery, mootools y demas, el caso es que me decidi a tomar mootools y darle, que porque elegi mootools? pues nomas porque si.
Tengo algunas ideas en mente para aplicar mootools, aclaro que antes hacer este chat no tenia ningun conocimiento sobre mootools y sobre javascript apenas se lo mas basico y de esto se daran cuenta si es que analizan el codigo javascript que incluyo aqui.
Bueno tambien comento que algunas de las cosas que tenia pensadas no pude implementarlas por falta de manejo de javascript especialmente del DOM, pero esta aplicacion cumple el objetivo al 100%, lo que me falto implementar solo fueron adornos y algunos efectos.
Otra cosa que me sucedio es que no me di cuenta que este chat solo funciona en internet explorer 6+, tanto en mozilla como en safari el codigo javascript no jala. Esto fue precisamente porque son mis primeras lineas de codigo en js y no contemple esta situacion.
Implementacion de la sala de chat
Esta aplicacion la dividi en 3 grandes partes.
1. Cliente (en javascript)
2. Servidor ( php y mysql )
3. La interfaz ( css + html)
La idea general en como trabaja el chat es la siguiente, entras a la pagina del chat y te muestra un pantalla para hacer login, eliges un nombre de usuario y una sala para entrar, en caso de haber algun error en uno de los campos se despliega un error descriptivo al usuario.
Si lo anterior paso bien te has loguado y aparece una segunda pantalla hay un campo de texto para escribir mensajes, un textarea para visualizar los mensajes escritos por todos lo usuarios de la sala, y textarea para ver los usuarios que se encuentran en la sala.
Hasta ahi todo va bien como en cualquier pagina de chat, veamos la parte tecnica, cuando un usuario hace login los datos qu introduce en la primer interfaz del login se comparan con los que hay en la base de datos, si no hay problema se registra al usuario en la bd, los mensajes que envie el usuario tambien se almacenan en la bd especificando la hora de envio y el tiempo de envio del mensaje, (si .. tiempo y hora son cosas diferentes).
El tiempo de envio es un entero grande que se obtiene con la funcion del php time(). Cada segundo el explorador hace peticiones al programa servidor.php solicitandole los mensajes mas recientes enviados por usuarios que se encuentran en la misma sala que yo. Mientras que el campo hora almacenara un dato tipo time.
El cliente recibe los mensajes nuevos (en caso de haberlos) y los despliega en el campo de texto. Algo similar sucede con el campo de texto destinado a mostrar los usuarios que se encuentran en la misma sala que yo, con el detalle de que las peticiones para obtener a los usuarios se realizan cada 3 segundos.
Y aqui viene una situacion especial, todo usuario que entra al chat se registra en la bd junto con su hora de entrada. Existe un tiempo de inactividad permitido para los usuarios, el tiempo de inactividad es el tiempo que ha pasado un usuario sin haber escrito al menos un mensaje.
Cada vez que un usuario nuevo entra al chat se revisa la bd buscando usuarios inactivos, si existen se borran de la bd. Si entro al chat y exedo el tiempo de inactividad el cliente enviara un mensaje al servidor indicandole que debo ser borrado de la bd al mismo tiempo que el cliente me redirecciona al la interfaz del login.
Lo anterior es con la intencion de tener la bd limpia de mensajes antiguos y garantizando que la caja de texto para mostrar a los usuarios de una sala simpre este actualizada y no me muestre usuarios que se logearon hace 20 dias al chat.
La verdad es que por el tercer punto que es la interfaz ocupe el codigo css y html de lo mas basico, y en realidad es muy poco el codigo que abarca esa parte.
En el segundo punto en la parte del servidor.php, se ocupan principalmente las operaciones basicas a la bd, sentencias select, insertar y borrar registros. A grandes rasgos el servidor recibe una peticion del cliente identificada por un numero entero y a partir de ahi ejecuta cierta funcion y devolviendo un resultado al cliente. aqui pongo un esquema de la bd muy general.

Y por el ultimo el cliente en javascript seencarga de solicitar informacion al servidor y desplegarla en el navegador.
Voy a anexar una carpeta comprimida con todos los archivos y con instrucciones de configuracion por si alguien quiere hecharle un ojo, no quiero colocar el codigo entero porque son como unas 400 lineas entre php y javascript, tampoco pienso explicar el programa linea por linea pues me llevaria algunas decenas de hojas.
Y ya para terminar la idea no era hacer una aplicacion comercial de un chat, simplemente queria empezar a conocer mootools y como ejercico de programacion esta exelente, y pues si a alguien le sirve el codigo pues adelante.
Clase para redimensionar imagenes en php
December 16th, 2009
bueno, he hecho una clase que sirve para redimensionar imagenes, es necesario tener instalada la libreria gd del php, he tratado de que se lo mas general posible, la clase tiene dos metodos utilizables que son
resizeImg() sirve para hacer un resize a un solo archivo de imagen y el otro resizeDir() que sirve que hacer resize a todas las imagenes contenidas en un directorio.
La verdad es que me ha sido muy util, sobre todo porque algunas veces es necesario sacar miniaturas de las imagenes de un directorio el problema es que a veces pueden ser cientos de imagenes y cambiarles el tamaño a mano es una tarea pesado, pero con esta clase solo es necesario pasarle algunos parametro ejecutar el script y listo.
La clase tiene un metodo que verifica los parametros pasados a los metodos, si existe algun error con alguno de los parametros se genera una exepcion mostrando un mensaje describiendo el error y se termina la ejecucion del metodo sin tirar warnings ni errores fatales.
Contaminacion de variables
November 20th, 2009
La contaminacion de variables o como se le conoce en ingles pollution, es un problema que se presenta en php cuando se tienen enormes bloques de codigo, el problema consiste en que durante la ejecucion del script algunas de mis variables pueden contaminarse es decir cambiar sus valores o inclusive el tipo sin que yo me de cuenta, esto es porque php no exige una declaracion de los tipos de las variables, tampoco hay restricciones en cuanto al tipo que le puedo asignar a la variables, y cuando el codigo es realmente inmeso y existe una gran catidad de variables existe el de que alguna variable importante pierda su valor.
Lo anterior puede derivar en un debugeo del script que exija demasiado tiempo, o tal vez un problema mas grave como un fallo critico en la aplicacion que se este desarrollando y pase desapercibo durante la fase de pruebas.
Actualmente php no implemente el Type Hinting como tal para evitar este problema. Es por eso que php no se considera aun como un lenguaje aceptable para desarrollar software incluso aunque en este momento haya aplicaciones bien escritas como lo es wordpress y muchos otros sistemas de foros que hay en la internet.
Validacion de formularios en php usando objetos
November 16th, 2009
Ahora vamos a hablar sobre el problema de validar formularios, seguramente ya habras hecho algun formulario en php y te haras dado cuenta que en ocaciones es necesario validar los datos que el usuario introduce, por ejemplo lo comun seria que un campo de texto de un formulario destinado a escribir un numero telefonico contega solamente numeros, una cierta cantidad de caracteres y tal vez podria contener guiones. Tal vez habras notado que puedes escribir toda clase de cosas en un formulario y enviar esos datos extraños a un script php para procesarlos, inclusive puedes enviar consultas sql o instrucciones de php, es ahi que por cuestiones de fiabilidad de los datos y seguridad del sistema es necesario la validacion de los datos, antes de cualquier otra accion como su procesamiento o almacenamiento en una base de datos.
Esta perfecto pensaras, lo unico que hay que hacer es validar los formularios y listo!!, resulta que surge otro problema, supon que en el lugar donde trabajas te han pedido validar los formularios del sitio de la empresa, lo que no te dijeron es que el sitio de la empresa tiene mas de 50 formularios y cada formulario tiene alrededor de entre 15 y 20 campos, validar lo anterior es una tarea enorme.
Y el enfoque para resolver este problema es la programacion orientada a objetos, lo cual me permitira reutilizar mucho del codigo que escriba y ahorrarme mucho tiempo.
La idea a de esto es crear una serie de clases que me sirvan para validar los distintos campos de un formulario, por ejemplo una clase para validar una campo telefonico, una clase para validar un campo descripcion, otra clase para validar un campo reservado para un nombre etc, y una clase especial que nos servira para manejar las demas clases.
La clase control sera capaz de darme la siguiente informacion:
- Podra decir si se genero o no un error en el proceso de validacion.
- Podra devolverme un error si es que lo hubo de un campo en especifico.
- Podra devolverme todos los errores generados.
Luego vendran las clases correspondientes para validar los distintos campos, estas clases heredaran de una clase abstracta, el unico objetivo de esto es que todo objeto validador contenga un metodo validar impresindible para el proceso de validacion de formularios, y que tenga a disponibilidad una serie de metodos basicos para validar campos.
¿Que es el polimorfismo?
November 16th, 2009
La etimologia de la palabra polimorfismo hace referencia a “muchas formas”, tal vez de a primera vista la palabra polimorfismo parezca ser un concepto dificil de enteder y tal vez hasta podria asustar a alguien, pero en realidad es un concepto sencillo. Pongamos un ejemplo para familiarizarnos mas con esta palabrota.
Tomemos a los humanos por ejemplo los humanos provenimos biologicamente de una jerarquia superior que son los mamiferos, los mamiferos duermen y nos han heredado la capacidad de dormir, asi que todos los humanos dormimos. Todos los humanos realizamos una accion comun que es dormir… pero existen humanos que duermen de diferentes formas, por ejemplo supongamos que tu duermes de lado, pero tu mama tambien duerme y tal vez duerme con la cara hacia arriba, otras personas duermen en posicion fetal, algunos duermen abrazando la almohada, en fin. La idea de esto es que todos los humanos dormimos pero lo hacemos de formas diferentes.
Lo mismo sucede con los objetos, es posible que la herencia y el polimorfismo sean la base de la programacion orientada a objetos. Veamos el siguiente inconveniente que surge al implementar un sistema de tienda virtual.
Supon que tienes una serie de objetos que represetan los articulos de la tienda, todos estos objetos deben de poder dar su descripcion por ejemplo nombre,precio..etc pero resulta que tienen caracteristicas diferentes y desplegar la descripcion para una television es diferente que para un paquete de frijoles o cualquier cosa que se te ocurra.
Una solucion podria ser la siguiente: meter todos los objetos articulo en un array, recorrer el array y escribir la descripcion del objeto segun la clase de la que provenga, utilizando una serie de if´s
1 2 3 4 5 6 7 8 9 10 11 12 13 | //productos es un array que contiene a los articulos for ( $i=0;$i<sizeof ($productos);$i++ ){ if ( $productos[$i] instanceof television ){ //desplegar la descripcion de la tele }else if ( $productos[$i] instanceof frijoles ){ //desplegar la descripcion para frijoles . . . }else if ( $productos[$i] instanceof claseN ){ // hay tantos if´s como clases de productos tengas :S } } |
Mi primer programa en php
November 14th, 2009
Antes de iniciar pongamos algunas reglas sobre la mesa.
Para escribir php es necesario un editor de texto, puedes usar cualquiera hasta el bloc de notas de windows, yo en lo personal utilizo homeSite porque te pone las intrucciones de colores, pero tu puedes usar el que te venga en gana
Todo el codigo php que escribas debe de ir DENTRO DE LAS ETIQUETAS < ? ?>; de la siguiente forma:
1 2 3 | < ? todo mi codigo php que escriba... ?> |
Todas las instrucciones en php deben de terminar con un punto y coma
listas enlazadas en php usando poo (2)
November 2nd, 2009
En la primera parte de este tutorial revisamos aspectos basicos de las listas, en caso de que no hubieras trabajado con listas antes. Si quieres revisar la teoria (muy general) sobre listas dale click aqui
Implementar una lista enlazada en php
Como ya sabemos una lista se compone de nodos, hay un nodo especial que indica el inicio de la lista, y uno de los nodos de la lista en su campo enlace apunta al vacio esto indica el final de la lista, en php representaremos el vacio por la constante NULL, los nodos y la lista seran objetos
listas enlazadas en php usando poo (1)
November 2nd, 2009
En este documento abarcaremos la creacion de listas enlazadas utilizando programacion orientada a objetos, un ejercicio tipico en la programacion en c ahora emulado en php, revisaremos la teoria alrededor de las su aplicacion en php.
El Documento se divide en 2 partes teoria y aplicacion. En esta primera parte se habla sobre la teoria si quieres ir a la segunda parte y ver la implementacion de las listas en php dale click aqui
Teoria de las listas enlazadas simples
Solo quiero aclarar que el objetivo de este documento es principalmente poner en practica la oop(object oriented programing) en php, Seguramente haya mil formas mas de implementar listas, mas eficientes y elegantes, por ahora el proposito es solo practica.
Aquellas personas que hayan programado en c seguramente ya sabran de que van las listas enlazadas y no es necesario que leas esto.