Sigueme en Twitter

Archivo de artículos en la categoría "Tutoriales"

Ir al inicio

Una embarradita de Ajax

23/04/2007

En estas épocas de tanto framework, lo mejor es simplemente bajarnos una libreria y empezar a utilizar sus funciones sin preocuparnos por lo que pasa detras, pero nunca esta demas aprender a hacerlo desde cero, no es tan complicado como comunmente se cree.

Introducción

La definición de Ajax según la Wikipedia:

“..es una técnica de desarrollo web para crear aplicaciones interactivas. Éstas se ejecutan en el cliente, es decir, en el navegador del usuario, y mantiene comunicación asíncrona con el servidor en segundo plano.”

Esta técnica no parte de nada nuevo, sino que se basa en las tecnologias existentes, como Javascript, DOM y sobre todo el objeto XMLHttpRequest, quien es el que se encarga de realizar las transacciones asíncronas y que el usuario no tenga que esperar por cada petición al servidor.

“..De esta forma es posible realizar cambios sobre la misma página sin necesidad de recargarla. Esto significa aumentar la interactividad, velocidad y usabilidad en la misma.”

Un ejemplo básico de una aplicación Ajax

Este ejemplo tiene 3 campos que se utilizan para la selección de un alumno, al hacer click sobre cualquiera de los campos, se manda llamar a un script de PHP, que conectandose a una base de datos devuelve la información del individuo seleccionado sin necesidad de recargar la página.

Es un ejemplo simple y que no tiene ninguna clase de comprobaciones con el fin de que sea sencillo de entender.

Se utilizan 2 archivos que realizan todo el trabajo:

intro.html:

Un html que contiene nuestras 2 funciones básicas de javascript, con la primera función obtenerAlumno(), recibimos los datos provenientes del usuario y mandamos llamar al script de PHP que se encargara de sacar la información de la base de datos.

La segunda función callbackAlumnos(), se ejecuta solamente cuando haya recibido la señal del que archivo de PHP termino su ejecución, en este caso tomamos los datos que el script de PHP nos regreso y se los asignamos al div resultados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<html>
<head>
<title>Introduccion a Ajax</title>
 
<script languague="Javascript">
 
/* esta funcion se encarga de iniciar la peticion asincrona */
function obtenerAlumno(id)
{
 
	/* 
	* tratamos de crear un objeto XMLHttpRequest, 
	* si esto falla usamos ActiveX que es el caso de Internet Explorer 
	*/
	try {
		xmlhttp = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (e) {
		alert("oh noes! no se que navegador estas utilizando!");
	}
 
	/* cuando la peticion al script de php se complete, llamaremos a la funcion callbackAlumo */
	xmlhttp.onreadystatechange = callbackAlumno;
	/* abrimos y mandamos una peticion al script de php, mandandole la id del alumno por get en la url */
	xmlhttp.open("GET", 'regresa_datos.php?id=' + id);
	xmlhttp.send(null);
}
 
/* esta function se ejecuta cuando el script de php termina su labor */
function callbackAlumno() {
	/* finalmente buscamos el div con id resultados y lo llenamos con la respuesta del script php */
	document.getElementById("resultados").innerHTML = xmlhttp.responseText;
}
 
</script>
 
</head>
<body>
<!-- unos simples inputs que mandan la id del resgistro que queremos --!>
<input type="radio" onclick="obtenerAlumno('1')" />Primer Alumno
<input type="radio" onclick="obtenerAlumno('2')" />Segundo Alumno
<input type="radio" onclick="obtenerAlumno('3')" />Tercer Alumno
<p>
<div id="resultados"></div>
<p>
 
</body>
<html>

regresa_datos.php:

Este script de PHP recibe la id de algun alumno, lo busca en la base de datos e imprime su información en pantalla.

1
2
3
4
5
6
7
8
9
10
$id_alumno =  $_REQUEST['id'];
 
mysql_connect('localhost', 'usuario', 'password');
mysql_select_db('base_datos');
 
$resultado = mysql_query("select nombre, domicilio, email from alumnos where id={$id_alumno}");
 
$fila = mysql_fetch_object($resultado);
 
echo "Yo soy {$fila->nombre}, y vivo en {$fila->domicilio}. Mandame un mail a {$fila->email}!";

Si son demasiado ociosos para crear la tabla de ejemplo, aqui les dejo la que utilize:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DROP TABLE IF EXISTS alumnos;
CREATE TABLE alumnos (
id int NOT NULL AUTO_INCREMENT,
nombre varchar(50) NOT NULL,
codigo varchar(10) NOT NULL,
domicilio varchar(50) NOT NULL,
email varchar(30) NOT NULL,
nacimiento date NOT NULL,
PRIMARY KEY (id)
);
 
INSERT INTO alumnos (nombre, codigo, domicilio, email, nacimiento) VALUES('Fulanito Perez', 'FP12345678', 'Av. Fulanita #123', 'fulanito@perez.com', '1983-03-01');
INSERT INTO alumnos (nombre, codigo, domicilio, email, nacimiento) VALUES('Homero Simpson', 'HS12345678', 'Av. Siempre Viva #123', 'homer@aol.com', '1954-01-02');
INSERT INTO alumnos (nombre, codigo, domicilio, email, nacimiento) VALUES('Don Benito', 'DJ12345678', 'Don Benito Street #123', 'elbeni@benilandia.com', '1944-10-30');

Puedes ver este ejemplo funcionando aqui.

Conclusión

Puedes hacer tu aplicación web mucho mas interactiva con el usuario con tan solo unas líneas mas de código, a pesar de que Ajax ya tiene algunos años desde que salio, todavia muchos desarrolladores lo desconocen o aún piensan que es muy complicado, es tiempo de cambiar eso!

4 Comentarios

Creando graficas con Flash y PHP

20/04/2007

PHP/SWF es una herramienta, casi tan anciana como su servidor, que te facilita la creación de graficas en flash que son creadas por medio de datos que contruyes con PHP.

Esta es una pequeña (muy pequeña.. borrador.. no preparada, etc) introducción al uso de PHP/SWF que hize respondiendo a una pregunta en los foros de CiberPC.

1er paso: Crea el archivo que proveera los datos a la grafica, llamemosle datos.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
include 'charts.php';
 
/*
* Aqui van los datos con los que construimos el grafico
* el primer arreglo indica los rangos
* los siguientes arreglos indican los datos y sus valores
* el primer valor de los datos, indica el nombre de la columna
*/
$chart [ 'chart_data' ] = array ( array ( "", "2004", "2006", "2006", "2007" ),
array ( "Ordenadores", 5, 10, 30, 63 ),
array ( "Lavadoras", 100, 20, 65, 55 ),
array ( "Refrigeradores", 56, 21, 5, 90 )
);
 
/* al terminar de construir tus arreglos, imprimelos */
SendChartData ( $chart );

2do paso: Crea el archivo que muestra los datos en pantalla, llamelecomoquieras.php

1
2
3
4
5
6
7
include "charts.php";
 
/*
* aqui le dices que inserte un objeto de flash y que obtenga los datos del archivo datos.php
* los ultimos numeros indican ancho y altura del objeto
*/
echo InsertChart ( "charts.swf", "charts_library", "datos.php", 500, 150 );

Resultado: Un feo (por el momento), pero rapido gráfico de Flash que te permite hacer soluciones rapidas y ahorrarte tiempo.

PHPSWF

PHP/SWF nos provee de una serie de atributos muy ricos, podemos cambiar practicamente cualquier cosa de la apariencia de la gráfica, el limite solo es tu imaginación (o tu flojera).

7 Comentarios

Instalar un servidor DNS con TinyDNS (djbdns)

25/08/2006

Hace tiempo escribi una serie de howto’s para la empresa en donde hospedo mis sitios, los voy a ir traduciendo y extendiendo poco a poco en mi blog por si les interesa.

Esta instalación la hize en Gentoo Linux, pero fácilmente la puedes adaptar para tu distribución de linux favorita.

1. Introducción

Un servidor DNS o Servidor de Nombre de Dominios (Domain Name Server) es utilizado para asociar un nombre (dominio) a una dirección IP, el objetivo de esto es que personas como tu y yo no tengamos que recordar cosas del tipo 64.233.187.99, sino que podemos recordar el simple google.com y listo. Dicho esto, los nombres de dominio fueron pensados para hacernos la vida mas fácil a nosotros, a una computadora le da igual.

En este momento existen 2 principales competidores para servidores DNS en el mundo del código libre, BIND y djbdns (también conocido como TinyDNS), siendo este último mas famoso por su sencilla y rapida configuración, asi como por ser mas ligero en memoria. BIND es mas usado todavia, pero ya se esta dejando ver su edad, ojala pronto le den una pulida. En lo personal uso TinyDNS, si bien no tiene demasiada carga, nunca me da problemas.

2. Instalación

Primero que nada, si aún no lo tienes, hay que instalar svscan que sirve como seguridad extra, por si algún dia se cae el TinyDNS que lo vuelva a levantar aútomaticamente.

emerge supervise-scripts

Ahora agregamos svscan al nivel de boteo de default, para que inicie cada vez que el servidor lo haga e iniciamos el servicio (puedes usar la herramienta eselect tambien si asi lo prefieres)

rc-update add svscan default
/etc/init.d/svscan start

ahora podemos hacer la instalación de TinyDNS

emerge djbdns

¿dificil? ¿a poco no es portage una maravilla? :)

3. Configuración

Lo primero que tenemos que hacer es que TinyDNS se ligue a una dirección IP que tengamos en nuestro servidor, con los usuarios tinydns y dnslog que fueron creados durante la instalación, recuerda reemplazar 1.2.3.4 con tu dirección IP!

tinydns-conf Gtinydns Gdnslog /etc/tinydns 1.2.3.4

despues creamos un soft link para que svscan se encargue de cuidar nuestro servidor

ln -s /etc/tinydns /service/tinydns

djbdns tiene una característica de cacheado, para hacer las cosas mas rápidas en un futuro, como mi servidor no es de gran demanda, no lo utilizo, pero vale la pena checarlo si tienes problemas de velocidad.

ahora es tiempo de crear nuestro primer registro, asi que lo relacionamos con nuestra IP y ejecutamos make para asegurar que se cumplan los cambios

cd /service/tinydns/root
./add-ns example.com 1.2.3.4
make

básicamente ya esta funcionando tu dominio, pero seguramente tendras que pulirlo mucho mas para apuntar a servicios como el email, tus direcciones del servidor dns o hacer subdominios, esto lo logras modificando el archivo /service/tinydns/root/data, como ejemplo puedes tomar esta configuración basica

Zexample.com:example.com.:example.com.:2005100111:28800:7200:604800:3600:3600
#servidor de dominio
&example.com::ns1.example.com.:3600
&example.com::ns2.example.com.:3600
#dominio completo
=example.com:1.2.3.4:3600
#record MX (mail)
example.com:1.2.3.4:a::60
#adicionales
+mail.example.com:1.2.3.4:3600
+ns1.example.com:1.2.3.4:3600
+ns2.example.com:1.2.3.4:3600
+www.example.com:1.2.3.4:3600

siempre recuerda ejecutar make despues de hacer cambios.

Eso es todo lo que se necesita para correr un servidor de dominios, ya tienes la base, extiendelo a tu gusto ya no dependes de los servicios de alguien mas!

Para referencia, dnsreport es un buen servicio que te dira que configuraste bien o mal, no olvides usarlo.

3 Comentarios

OSx86 en una Dell Inspiron 6000

25/07/2006

He tenido algunos problemas para hacer la instalación en mi laptop, pero poco a poco la he echado a andar, esto no pretende ser una guía, pero voy a hacer un resumen de los pasos que hize para no perderle la pista. Disculpen la calidad de las fotografías las tome con mi Nokia 6600 porque no tenia camara a la mano.

Mi Inspiron es una de las que trae video integrado con Intel Extreme Graphics II, por esa razón me ha dado problemas, si tuviera una ATI como la mayoria todo seria diferente ó como ya lo mencione, la tarjeta inalambrica que trae de fábrica no funciona con MacOS X todavia, por lo que me decidi a comprar en eBay una Truemobile 1450, que esta comprobada que funciona y funciona muy bien n_nPude encontrar bastante informacion y ayuda en el sitio oficial del osx86, ahi encuentras guias, wikis y mucha información muy útil, mas que nada estos dos temas me ayudaron bastante, foro sobre la inspiron 6000, sobre el chip de video 915

Lo primero que hize fue conseguir la instalación para MacOS X pero parchada, ya que la versión original contiene un seguro (bastante debíl, por cierto, por algo a de ser), la puedes bajar de los muchos lugares donde se consiguen torrents, como por ejemplo, The Pirate Bay, el release que me baje fue el 10.4.6, parcheado por JaS

Despues de quemar el ISO en un DVD me tope con el primer problema, debido a mi tarjeta de video, al arrancar con el dvd de instalación llega a una parte despues de la pantalla inicial de la manzana, en que mi maquina se queda atorada con una pantalla azul, muy a lo windows, 5 minutos de investigación me enseñaron que podria proseguir la instalación si conectaba un monitor externo a mi salida de video, lo hize y grata sorpresa, si continuo la instalación.

conectando a un monitor externo

A la hora de particionar, hay una herramienta para esto en la sección de Utilerias, debes de tomar en cuenta que la particion donde vas a instalar tu MacOS debe de ser una partición primaria, sino te va a ser mas dificil el bootear, despues de tener bien la partición, es importante que al seleccionar los paquetes a instalar, selecciones los parches de acuerdo a tu procesador, pon atención especial al ‘common’, el no colocarlo siendo mi procesador SSE2 me provoco tener que instalar de nuevo.

Ahi mismo te dice que debes de instalar para cada procesador, solo debes de saber si tu procesador es SSE2 o SSE3, para usuarios de linux, esto se sabe haciendo un simple ‘cat /proc/cpuinfo’ viendo la sección de flags, para los usuarios de windows existen programas que te dan esa info, googleen y encontraran. Generalmente los pentium M(centrino) son SSE2 y los Pentium 4 son SSE3.

eligiendo particiones

El proceso me tomo como 1 hora en mi laptop, pero de seguro es mas rapido en una PC con mejor procesador, y toma alrededor de los 6GB en total.

Terminada la instalación tuve que añadir unas lineas extras a mi grub, para que MacOS booteara sin afectar mi instalación de Ubuntu ni la de Windows, eso es muy sencillo agregando una nueva entrada como esta, mi partición fue la tercera del disco, tu adaptala como sea tu caso, en grub las particiones se nombran desde el 0.

title MacOS X
root (hd0,2)
chainloader +1

La partición donde instalaste el MacOS debe de ser de booteo, cambiala con cfdisk en linux o fdisk en msdos, sino es asi, booteara en windows a la hora de seleccionar el MacOS (no me preguntes porque)

Justo cuando estaba pensando en lo facil que habia sido la instalación, cuando me estaba saboreando probar mi nuevo SO, Zaz! pantallazo azul! ya me parecia olia mucho a Microsoft todo esto, pero eso saca uno por usar plataformas que no estan hechas para ese SO.

Nuevamente fue culpa de mi tarjeta de video integrada, por alguna razón sigue dando bien el video, solo que por la interface incorrecta, trata de dar el video como en la instalación por la salida de video, a la fecha de escribir este post todavia no hay una solución por medio de software, si quieres bootear correctamente tienes que hacerlo con un monitor externo.

Si no quieres estar cargando tu monitor a todos lados, en mi caso creo que el cargar un CRT de 19″ le quitaria todo lo “portatíl” al asunto, hay otra solución si bien algo sucia, funciona. Solo debes de colocar 2 pequeños cables para puentear tu salida de video en los pines 1-6 y 2-12, esto hara creer a tu laptop que tiene una salida hacia un monitor, no garantizo que esto sea del todo seguro, pero por lo menos a mi no me ha dado problemas. Puedes tomar de ejemplo este dibujo que hizo uno de los foreros de osx86

dirty fix

cables en la salida del monitor

Ya con esto puedo bootear bien en mi nuevo, flamante y económico MacOS X, ahora el único problema que tengo es que el sistema se alenta despues de un par de minutos de funcionar o al tener varias aplicaciones abiertas, no se si esto se solucione hasta que haya soporte para mi driver o hasta que compre una nueva memoria RAM, por lo pronto me voy a comprar 1 ó 2 GB de RAM via eBay de nuevo y les cuento que pasó, por lo pronto de regreso al trabajo.

al fin booteando

mi escritorio

== Actualización #1 ==

Al instalar los drivers de sonido (ve esta guía), o mas bien repararlo, porque ya los trae, me soluciono el problema de la ralentización, ahora todo va muy bien, muchas veces tengo que conectar primero la maquina antes de prenderla porque sino arranca con el procesador a menos velocidad, pero eso ya es culpa del speedstep de intel

== Actualización #2 ==
Dicho y hecho, me llego mi tarjeta inalámbrica de 20dlls, truemobile 1450, y la detecto sin tener que hacer modificaciones o instalar nada, igual en windows, solo falta ubuntu, pero creo que lo voy a quitar para poner Gentoo, ya tengo demasiado SO para mortales instalado n_n

La tarjeta compatible
Cambiando Wireless

== Actualización #3 ==

Otra cosa que arregle fue el modulo de administración de energía, ya que no se estaba mostrando las cargas de la pila automáticamente, lo cual tiene sentido, porque mi laptop es ACPI y apple hace todo para las nuevas dual core, como sea un chavo de osx86, escribio un driver para agregar soporte para ACPI.

Lo único que tienes que hacer es colocar el .bundle en el directorio /System/Library/SystemConfiguration sobreescribiendo el anterior y listo. Esta comprobado que funciona con 10.4.6 y 10.4.7

Parche para Powermanagement

Powermanagement

== Actualización #4 ==

Al parecer cuando hize la instalación no seleccione el parche para habilitar Quartz Extreme y Core Image (son caracteristicas que hacen que tu tarjeta de video haga mas cosas “bonitas”), eso lo solucione con este parche, ojo, solo sirve para tarjetas de video integrado con chipset del GMA900

Soporte para GMA900

funciona tanto para MacOS X 10.4.6 como para 10.4.7, talvez para futuras versiones tambien lo haga

gma900

== Actualización #5 ==

No había probado mi OSX desde que instale una memoria adicional de 1GB a mi inspiron (para un total de 1.5GB) y la verdad es que ahora va excelente, no tiene problemas para correr programas pesados fluidamente como Eclipse o el mismo Office.

Estuve a punto de borrar esta partición, pero con esto y otras cosas (como el reciente lanzamiento de MacFUSE y mi licencia pagada y sin usar de textmate) me han dado ganas de probar la actualización a 10.4.8 y seguir usandolo de vez en cuando junto con Ubuntu, ya veremos cuando tenga tiempo libre.

35 Comentarios