La educación actualmente

21 11 2009

Para variar un poco…

EDUCACIÓN 1969 vs 2009

“Todo mundo piensa en dejar un país mejor para nuestros hijos…

Cuando lo que debería pensar es en dejar mejores hijos para el país”

Esta caricatura fue la ganadora en un congreso sobre educación y vida sostenible celebrado en Sao Paulo.





Que es ADOdb?

17 09 2009

ADOdb es un conjunto de librerías de bases de datos para PHP y Python. Esta permite a los programadores desarrollar aplicaciones web de una manera portable, rápida y fácil. La ventaja reside en que la base de datos puede cambiar sin necesidad de reescribir cada llamada a la base de datos realizada por la aplicación, por ejemplo, si tenemos la mitad del proyecto con MySQL y por x,y o z motivos tenemos que pasarla a Oracle ¡ lo único que cambiamos es el controlador de acceso y conexión! .

Según el Sitio Oficial de ADOdb, son soportadas las siguientes bases de datos:

  • MySQL
  • PostgreSQL
  • Interbase
  • Firebird
  • Informix
  • Oracle
  • MS SQL
  • Foxpro
  • Access
  • ADO*
  • Sybase ASE
  • FrontBase
  • DB2
  • SAP DB
  • SQLite
  • Netezza
  • LDAP
  • generic ODBC and ODBTP

INSTALACIÓN:

  • En GNU/Linux

Abrimos el Gestor de paquetes Synaptic (o tu gestor de paquetes) e instalamos libphp-adodb o por consola:

$ sudo aptitude install libphp-adodb

Este paquete se instala por defecto en el directorio /usr/share/php/adodb, por consiguiente necesitamos hacer un enlace simbólico desde la carpeta /var/www/, para esto abrimos una consola y ejecutamos lo siguiente:

$ sudo ln -s /usr/share/php/adodb/ /var/www/adodb

Si es necesario le damos permisos de ejecución

$ sudo chmod  777 -R /var/www/adodb
  • En Windows

Puedes descargarla desde aquí, la descomprimimes, la renombras como “adodb” y la colocas en tu directorio del proyecto y listo.

Pero ¿Como usar ADOdb?.

CONEXIÓN A LA BASE DE DATOS

Para conectarnos a la base de datos creamos un archivo llamado conexion.php y lo configuramos según nuestros parámetros:

<?php

//Invocamos la librería ADOdb
require_once("adodb/adodb.inc.php");

$conServidor    = "localhost";
$conBaseDeDatos = "nombre_base_de_datos";
$conUsuario     = "usuario";
$conClave       = "clave";

/*
*Aquí especificamos el controlador que debe utilizar para la conexión
*MySQL: mysql
*/

$bd = NewADOConnection("mysql");
$bd->debug = false;
$bd->Connect($conServidor,$conUsuario,$conClave,$conBasededatos);

?>

FUNCIONES

Estas son las funciones basicas para cualquier tipo de acciones a una base de datos, podemos crear un archivo llamado bd_usuarios.php

<?php
/* Funcion de busqueda */
function buscar($bd, $arreglo)
{
  //Con prepare precompilamos la consulta
  $sql  =  $bd->Prepare("SELECT * FROM usuarios WHERE usuario = ? AND pass = ? ");
  //Ejecutamos la consulta y tomamos los datos en forma matricial
  $rs   =  $bd->GetAll($sql, $arreglo);
  //Devolvemos la matriz con los registros consultados
  return ($rs);
}

/* Funcion de listado */

function listar($bd)
{
  //Con prepare precompilamos la consulta
  $sql  =  $bd->Prepare("SELECT * FROM usuarios ORDER BY id ASC");
  //Ejecutamos la consulta y tomamos los datos en forma matricial
  $rs   =  $bd->GetAll($sql);
  //Devolvemos la matriz con los registros consultados
  return ($rs);
}

/* Funcion de insertar */

function insertar($bd, $arreglo)
{
  //Insertamos en la base de datos
  $rs   =  $bd->AutoExecute("tbl_usuarios", $arreglo, "INSERT");
  return ($rs);
}
/* Funcion de modificar */
function modificar($bd, $arreglo, $__codigo)
{
  /*
   * Recibimos en el arreglo los datos a modificar
   * El codigo es identificador de la fila o llave primaria
   *
   * Indicamos la tabla donde se va a modificar, los datos a modificar
   * y la accion UPDATE y decimos que el campo id de la fila de la tabla sea igual
   * al codigo recibido.
  */
  $rs   =  $bd->AutoExecute("tbl_usuarios", $arreglo, "UPDATE", "id = '".$__codigo_usuario."'");
  //retornamos true si se modifico con exito o false si se produjo algun error
  return ($rs);

}
?>

LLAMADO A LAS FUNCIONES

A continuación veremos como preparamos los datos para registrar/buscar/modificar en una base de datos

<?php

//incluimos el archivo con la conexion y las funciones
require_once 'conexion.php';
require_once 'bd_usuarios.php';

/* Busqueda */
//Definimos una variable tipo array con los datos recibidos de un formulario
//o cualquier tipo de dato
$reg = array();
$reg['Campo1_tabla'] = $_POST['campo_formulario´]
$reg['Campo2_tabla'] = $_POST['campo_forulario']

$rs = buscar($bd, $reg)
if ($rs)
  echo "Encontrado";
else
  echo "No se encontro el registro";

/* Funcion de listado */

$rs = listar($bd);
foreach($rs as $k => $fila)
{
  echo "Campo: ".$fila['nombre_campo o numero_posicion']."<br>\n";
}

/* Funcion de insertar */

//Definimos una variable tipo array con los datos recibidos de un formulario
//o cualquier tipo de dato

$reg = array();
$reg['Campo1_tabla'] = $_POST['campo_formulario´]
$reg['Campo2_tabla'] = $_POST['campo_forulario']

$rs =  insertar($bd, $reg)
if($rs)
  echo "Se registro correctamente";
else
  echo "Se produjo un error al guardar los datos";
/* Funcion de modificar */
$__codigo = $__codigo_de_la_fila_o_llave_primaria;

$reg = array();
$reg['Campo1_tabla'] = $_POST['campo_formulario´]
$reg['Campo2_tabla'] = $_POST['campo_forulario']

$rs =  modificar($bd, $reg, $__codigo)
if($rs)
  echo "Se Modifico correctamente";
else
  echo "Se produjo un error al modificar los datos";
?>

Espero que este super mini tutorial les sirva de ayuda y los guie un poco. Actualmente estoy trabajando en un ejemplo práctico con adodb tanto estructurado como orientado a objetos, así que les pido un poco de paciencia.

Cualquier inquietud puedes dejar un comentario.





10 Consejos para MySQL

20 02 2009

Acontinuación te dejo 10 consejos para el uso de MySQL, en realidad son muy sencillos de seguir y se que nos ayudará para mejorar la eficiencia de nuestro motor de base de datos:

  • Ponle contraseña al usuario root y luego cámbiale de nombre: lo más normal es ponerle contraseña al usuario root, pero no nos sorprendamos si vemos un root sin password o con algo tan ridículo como root_1. Lo que si no se suele hacer mucho es cambiar el nombre al root y eso es una buena idea que habría que tener siempre en cuenta… pero que
    tampoco sea admin (como dice el artículo), sino algo más difícil de adivinar.
  • Oculta MySQL de Internet: MySQL no necesita estar accesible desde Internet, por lo que mejor evitar esa posibilidad.
  • Protege el directorio de instalación de MySQL de otros usuarios
  • No almacenes datos binarios: que MySQL lo permita no quiere decir que sea lo mejor hacerlo. MySQL envía los datos de una única vez, esto implica que hasta que no se envíe el campo completo, la aplicación no puede parsear la información. Es preferible almacenar los datos en el sistema de ficheros y almacenar en la BD un ruta hasta el fichero. Aunque yo casi recomendaría guardar en la BD una clave, para que mediante una lógica en la aplicación se pueda recuperar la ruta, así, si tenemos que modificar la ruta no tenemos que modificar todos los registros de la BD, tan solo la lógica del programa.
  • Usa SQL standard: MySQL ofrece posibilidades que no son del SQL estándar y que pueden aportarnos muchas ventajas, el problema es que nos limita a exportar nuestra aplicación a otras BD si en un futuro lo necesitamos. La solución es no ejecutar esas sentencias directamente, sino mediante una clase, que extienda de una clase genérica, así podremos simular esas funcionalidades de MySQL en otras BDs creando otras clases para cada motor de BD.
  • Crea tu propio generador de auto_increment: el auto_increment nos crea números consecutivos que podemos usar en
  • nuestras tablas, pero con limitaciones, solo existe un auto_increment por tabla y son independientes de las tablas, por lo que distintas tablas pueden tener mismo id, lo cual puede no convenirnos en algunas circunstancias.
  • No mezcles código de presentación con el de acceso a BD: es el sistema MVC que siempre debemos usar.
  • Normalización y denormalización: la normalización nos permite tener una BD sin datos redundantes. Desafortunadamente, a veces esta pena el rendimiento, para lo cual, una vez normalizada la BD es conveniente denormalizarla.
  • Usa un pool de conexiones en el servidor Web o en el servidor de aplicaciones: la conexión a la BD es algo costoso, si compartimos conexión mediante un pool, ganaremos en rendimiento.
  • Mejoras tus queries con EXPLAIN SELECT: aunque es un comando difícil de seguir, nos puede ayudar mucho.

Visto en | Programación.com





Disparadores o Triggers en una base de datos

29 01 2009

Recordando algunas utilidades de una base de datos hoy hablaré de una en particular: los Disparadores o Triggers.

Un Disparador o Trigger es una rutina autónoma asociada con una tabla o vista que automáticamente realiza una acción cuando una fila en la tabla o la vista se inserta (INSERT), se actualiza (UPDATE), o borra (DELETE).  Un Disparador nunca se llama directamente, en cambio, cuando una aplicación o usuario intenta insertar, actualizar, o anular una fila en una tabla, la acción definida en el disparador se ejecuta automáticamente (se dispara).

accion_disparador

Las ventajas de usar los Disparadores son:

  • La entrada en vigor automática de restricciones de los datos, hace que los usuarios entren sólo valores válidos.
  • El mantenimiento de la aplicación se reduce, los cambios a un disparador se refleja automáticamente en todas las aplicaciones que tienen que ver con la tabla sin la necesidad de recompilar o relinquear.
  • Logs automáticos de cambios a las tablas. Una aplicación puede guardar un registro corriente de cambios, creando un disparador que se active siempre que una tabla se modifique.
  • La notificación automática de cambios a la Base de Datos con alertas de evento en los disparadores.

Los Dispararores tienen dos palabras clave, OLD y NEW que se refieren a los valores que tienen las columnas antes y después de la modificación.  Los INSERT permiten NEW, los DELETE sólo OLD y los UPDATE ambas.

Un ejemplo de un disparador seria uno asociado a la sentencia DELETE en una tabla de clientes, para impedir que se elimine uno que tenga un saldo distinto de cero.  Otro disparador seria guardar los datos que se modifican de un cliente en otra base de datos que serviria de auditoria.

Acontinuación veremos un sencillo ejemplo práctico para una base de datos en MySQL 5

Crearemos la tabla de clientes:

CREATE TABLE clientes
(
id int not null auto_increment,
nombre varchar(100),
seccion varchar(10),
PRIMARY KEY(id),
KEY(nombre)
) ENGINE = InnoDB;

Guardamos algunos registros:

INSERT INTO clientes (nombre, seccion) VALUES

('Ivan','administración'),
('Susana','jefe de prensa'),
('Max','asistente operativo'),
('Javier','supervisor');

Creamos una tabla que será la que guardará los datos de la “auditoria”

CREATE TABLE auditoria_clientes
(
id int not null auto_increment,
nombre varchar(100),
anterior_seccion varchar(10),
usuario varchar(40),
modificado datetime,
primary key(id)
) ENGINE = InnoDB;

y finalmente un Disparador o Trigger que se active cada vez que alguien modifique un dato de la tabla clientes y lo guardará en una tabla junto al nombre del usuario y la fecha.

CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(name, anterior_seccion, usuario, modificado )
VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );
CREATE TRIGGER trigger_auditoria_usuarios AFTER UPDATE ON usuarios
FOR EACH ROW
INSERT INTO auditoria_usuarios(Nombre_usuario, Anterior_pass, Usuario, Modificado )
VALUES (OLD.Nombre_usuario, OLD.Pass, CURRENT_USER(), NOW() );

Espero que les haya servido de guía!!!





Querido amigo Windolero….

27 01 2009

querido-amigo-windolero

Carta a un usuario de Window$….

Querido amigo “Windolero”:

Te escribo para saber de ti y de tu sistema operativo Windows. Imagino que desde la última vez que hablamos has tenido que instalalrlo unas par de veces. Imagino que se te a bloqueado, congelado, saturado y/o hasta te has encontrado con la pantalla azul de la muerte… si, eso que nosotros los linuxeros llamamos la “BSOD”… Ah vaya pero que descortés soy xD, te dije que soy un “Linuxero” pero no me expliqué. Verás que desde la última vez que hablamos he estado probando un sistema que se conoce generalmente como GNU/Linux del cual se derivan muchos sistemas operativos hermanos. En mi caso estoy utilizando el sistema operativo Ubuntu pero existen muchísimos más como por ejemplo: Fedora, OpenSUSE, Mandriva, Slackware, Debian, Arch Linux, Linux Mint, Sabayon, etc…

Te cuento que este sistema operativo que estoy usando es bastante estable. Ya no tengo esos problemas que Windows solía darme. Antes tenía batallas con los caballos de troya, los viruses me enfermaban, tuve que ir al doctor varias veces porque los gusanos vivian de mí como parásitos y una vez llegué a salas de emergencias casi muriendome… al final del túnel he visto una gran luz azul con el código de un error. Fué en ese momento cuando un amiguito divino vino a mi rescate. Te lo presento, se llama “Tux” y es un pinguino muy envidiado por muchos pero yo le debo la vida. Es mi mejor amigo. Fué “Tux” quien me enseñó el camino correcto y mirame; Ni un solo virus en mi sistema inmunológico, ningún cabayo de troya se atreve a enfrentarse a “Tux” y repele todo gusano sucio que quiera vivir de mi!

Tux fué quien me enseñó el sobre estos sistemas de los que te he hablado anteriormente en esta carta. He aprendido que existe un tipo de software llamado “Software Libre”. El Software Libre es software que además de ser gratuito en su mayoría de veces, también deja su codigo abierto al público para que sea mejorado cada día más o simplemente para que aprendas y te desarrolles como programador. Dentro de cada sistema operativo GNU/Linux encontrarás un sin fín de programas libres. Así tendrás un sistema operativo completo. Podrías tardar 2 o 3 horas instalando software adicional para tu Windows pero yo en cambio solo tardo 20 minutos instalando mi sistema de GNU/Linux y listo. Estos programas son full, no esperes que GNU/Linux pre-instale en tu sistema una versión de prueba de algún software al cual luego deberás de instalarle un key pirata, jejeje. Además muchos de los sistemas operativos de GNU/Linux se actualizan constantemente mediante actualizaciones online y/o nuevas versiones disponibles en CD, DVD, USB y/o instalación Online; Así tendrás un sistema operativo al día / actualizado y estable.

Deberías de darle una probadita, amigo Windolero… pues te cuento que muchos de los sistemas operativos de GNU/Linux cuentan con un disco vivo que también se le conoce como LiveCD. Este LiveCD te deja probar el sistema sin tener que instalarlo en tu disco duro. En ningún momento le hará daño a tu querido Windows que tanto quieres; Recuerda que Tux es un pinguino del bien y no del mal.

Por cierto… recuerdas la vieja PC que tirastes a la basura hace unos meses? Pues te cuento que recuerdo haberla recogido del basurero para saber que problemas te pudo haber causado. Creí que podía arreglarla. Al poco tiempo encontré que sus piezas estaban viejas pero no estaban dañadas. Así que la probé y me dí cuenta que Windows XP no corría en ella… Pero aún así la guardé en un rincón de mi casa y hace una semana la he podido revivir con un sistema operativo de GNU/Linux para sistemas de bajo consumo. Te lo dije! “Tux” es un ser divino! ha resucitado ese viejo PC!!!… GNU/Linux cuenta con varios entornos de escritorios. Desde uno liviano y bonito hasta uno elegante y fino. Cada uno cumple su tarea como entorno de escritorio y son bastante tuneables.

Olvidé mencionarte que muchos de los sistemas de GNU/Linux cuentan con repositorios llenos de Software Libre listos para ser instalados?, Pues si, amigo… Digamos que un repositorio es como un servidor lleno de software. La mayoría de los sistemas operativos de GNU/Linux cuentan con un programita desde el cual puedes buscar, instalar o desintalar esos programas dentro de esos repositorios. Así puedes ahorrar tiempo para tomarte un té y librarte de lugares maliciosos. No digo que vayan a destrozar tu sistema de GNU/Linux pero es una perdida de tiempo entrar a esos lugares llenos de publicidad porno o gay! Además todos los programas en los repositorios son testeados y actualizados! “

Para ver el artículo completo y todas las variedades de aplicaciones disponibles y más utilizadas puedes seguir este lanzador.

Visto en | Portal Linux






Nuestra evolución?

16 01 2009

Para variar un poco….

evolucion_humana

Será acaso esta nuestra evolución?





Error global en relojes UNIX en el 2038

14 01 2009

Según reportan en SoyGik, en el año 2038, se producirá un colapso mundial, que puede ser de magnitud planetaria, en el que se bloqueará el reloj interno de sistemas UNIX que hayan tomado de referencia el año 1970 (la mayoría), y que sean de arquitectura 32 bits, al haber ser ser 2 · 2³¹ -1 valores, guardando el último bit para el signo (de ahí que se multiplique por 2 y se quita el 0). Teniendo en cuenta todo esto, veremos como en ese año, puede ocurrir algo parecido a lo que pudo ocurrir con el Efecto 2000, sólo que ahora sería el Efecto 2038.

Aca les dejo la Animacion de lo que pasa:

year2038problem4296384il4

Puedes leer más de todo esto, en la wikipedia, o en el artículo en SoyGik.

Visto en | ubuntu.jhosman.com