sábado, 14 de enero de 2012

Tarea Común PHP 1 - Conectarse a un Base de Datos

Creo que es la tarea más común de todas por ello la coloco de primero. ¿Porqué digo esto?. Simple si usted usa PHP es porque muy probablemente este creando un Sitio Web Dinámico y para ello mínimo tendrá que obtener los datos y ¿En donde están?... En la Base de Datos por supuesto. De tal manera que si los quiere, así sea para mostrarlos solamente debe conectarse a la base de datos. Así que vamos a ver como se hace:

<?php

    $host = "localhost"; //En muchos casos sera este, al menos durante el desarrollo
    $usuario = "root"; //Este usuario es el administrador del sistema, por ahora lo voy a usar pero si va a            
                               //publicar el sitio mejor es usa uno con menos privilegios
   $password = "";    //Para este caso voy a dejarlo vacío pero use el que configuró al instalar el sevidor
   $db = "tutorialComun";   //El nombre de la base de datos
   mysql_connect ($host,$usuario,$password); //Con este comando realizamos la conexión una variante es    
                                                                      //mysql_pconnect ($host,$usuario,$password)
                                                                     //mysql_pconnect lo que hace es que se conecta pero no se
                                                                    //destruye la conexión cuando se termina de procesar la página
                                                                    //sino que lo mantiene abierto, es decir, es persistente
  mysql_select_db($db); //Con este comando le decimos a MySql que base de datos vamos a usar de
                                      //manera que cualquier consulta o lo que hagamos en la Base de Datos se hará          
                                      //sobre esta base de datos

?>

Con ello simplemente nos conectamos para realizar una consulta debemos ejecutar el código anterior y el siguiente

<?php

$res = mysql_query ("SELECT * FROM tabla "); //Ejecutamos la consulta en la Base de Datos
if (mysql_num_rows ($res)  > 0) //Comprobamos que la base de datos no este vacía
{
    while ($row = mysql_fetch_assoc ($res)) //Obtenemos los datos para un registro
    {
                    foreach ($row as $clave=>$valor) //Obtenemos el registro como un par clave/valor
                   {
                       echo $key." => ".$value; //mostramos el par, aquí iría el procesamiento necesario de los datos
                   }
    }
}
else
{
echo "La tabla no tiene registros, esta vacía"; //En caso de que no hayan datos
}

?>

En el codigo anterior pudimos haber el omitido el foreach y dentro del while obtener el valor de cada campo haciendo $campo = $row["campo_nombre"]

domingo, 30 de octubre de 2011

Reflexión sobre relaciones de Agregación y Asociación en UML Continuación

Relación Maestro-Esclavo:

Esta semana leí un documento que formaliza la relación tiene un, realmente era una formalización científica y estaba escrito en OCL (Object Constraint Language).

Lo interesante es que si nos detenemos en la relación maestro-esclavo, es una relación tiene-un, es decir, el maestro, en este caso, debe tener un esclavo porque si no entonces no es maestro.

Pero esta relación se refiere a mando, uno indica y el otro obedece. Sin embargo, analicemos esta situación: Digamos que tenemos un vaso, ahora le agregamos un dado. ¿El vaso tiene un dado?. Pareciera que si en el momento que sí en el momento en que tenemos el dado, pero si le quitamos el dado el vaso sigue siendo un vaso completo. Por lo tanto, el vaso no tiene un dado porque una condición de la relación tiene un es que si le quitas la parte al todo, el todo se destruye por la simple razón que pasa de ser todo a ser algo parcial, lo que constituiría una contradicción.

Ahora bien, el vaso con el dado es una relación maestro-esclavo porque a donde mueves el vaso mueve el dado, pero a donde mueves el dado no mueves el vaso (lo puedes mover dentro del vaso). Por herencia entonces si decimos la relación vaso-dado es maestro-esclavo y maestro-esclavo es tiene-un por transitividad la relación vado-dado es tiene-un. Entonces ¿Colocamos una agregación entre el vaso y el dado?.

La respuesta es no, porque para que el vaso comande al dado primero debemos agregarle el dado, es decir, el vaso ya existía antes de poseer el dado A la vez, un diagrama de clase es un diagrama estructural, muestra como se componen los objetos de los que son familia las clase. Por ejemplo, tenemos este vaso con el dado y le colocamos un vaso aparte, si decimos que el vaso tiene un dado entonces el otro no es un vaso pero es un contradicción porque realmente es un vaso.

En conclusión, un Diagrama de Clases muestra definiciones y porque un objeto mande a otro, no quiere decir que el objeto que manda tenga una agregación con el que obedece.

Muchas Gracias por su lectura.

Referencia al documento indicado inicialmente:


The Whole-Part Relationship in the Unified Modeling Language: A
New Approach

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.72.43&rep=rep1&type=pdf


domingo, 23 de octubre de 2011

Reflexión sobre relaciones de Agregación y Asociación en UML

Realizando un proyecto tuve un serio problema cuando tuve que decidir si una relación UML era de Agregación o Asociación.

Por ello estuve buscando por Internet, (ya saben Google). Entre las paginas que visite la que se destacó como casi siempre fue Stack Overflow (muy buen foro de preguntas).

En fin la respuesta que casi siempre obtuve fue la siguiente, una agregación es una relación entre un todo y sus partes en las que las partes pueden existir sin el todo, y una asociación, una relación débil entre las partes que indica que ambas colaboran entre sí.

Bueno a mi me parece que es una buena definición si estas creando una Ontología. Sin embargo, si lo que estas creando un diseño creo que pueden existir otras formas de pensar al respecto.

La clave a la solución me llegó cuando estaba desarrollando un modulo para crear una lista de estudiantes de un hipotético sistema de administración de exámenes.

Por ejemplo, digamos que queremos un Examen, que es mejor hacer:

Profesor.getExamen () o Estudiante.getExamen ()

Si hacemos Estudiante.getExamen () necesitamos primero la lista de todos los estudiantes, digamos Matricula.getEstudiante () y así encontramos los estudiantes, después de todo una matricula tiene un conjunto de estudiantes, luego seleccionamos un estudiante y decimos Estudiante.getExamen ().

Eso parece bien excepto por el hecho de que el estudiante pudo no haber asistido al examen, entonces tendríamos que pasar al siguiente estudiante y así sucesivamente.

Sin embargo si decimos Profesor.getExamen () pueden ocurrir dos cosas, una regresa null, pero eso indicaría que no existe aun el examen, o nos regresa el examen.

Esto me parece se debe a que quien tiene la responsabilidad de darnos el Examen es el Profesor, es decir a el es a quien se le pide el examen, ya sea para agendarlo y administrarlo posteriormente o para que el propio estudiante obtenga el examen si este es administrado por el propio profesor.

Ahora bien, es cierto que al principio el examen es en realidad un cuestionario, pero aún así a quien le debemos preguntar quien asistió o no al Examen es al administrados, no a cada estudiante

lunes, 5 de septiembre de 2011

¿Cómo leer un PDF en Linux sin una X Window por Consola?

Para leer un PDF en Linux usando directamente el Bash, es decir, sin un entorno de escritorio tenemos al menos dos
posibilidades (No descarto que haya otras).

En primer lugar, podemos utilizar el proyecto fbida este proyecto provee de
diferentes programas entre estos tenemos un visor de imágenes y un visor de pdf/postscript, los cuales funcionan usando el
framebuffer, es decir, sin entorno de escritorio.

Fbi permite ver imágenes y fbgs permite ver pdf.

Para instalarlo en Ubuntu 11 es muy sencillo:

sudo apt-get install fbi

Para ver un pdf se hace lo siguiente

sudo fbgs -c <ruta_archivo.pdf> Ej:
sudo fbgs -c ./archivo.pdf

Otra forma es convertir el archivo pdf a una colección de pagina html y verla con un explorador como elinks

Para instalar elinks use el siguiente comando:

sudo apt-get install elinks

Instalamos un conversor de pdf a html

sudo apt-get install pdftohtml

Convertimos el pdf en paginas html

pdftohtml <ruta_archivo.pdf>

Para leer el documento solo hay que usar el comando

elinks <ruta_archivo.html>

Es decir, si la ruta es:

./documento.pdf

Se abriría con

elinks ./documentos.html

Muchas gracias por su atención.
Disclaimer: El autor de este artículo no se hace responsable por el uso ni las consecuencias del uso que se haga de esta información. Actúe con cautela.