martes, 12 de noviembre de 2013

Examen 3a. Evaluación.

Realice un modelo de implementación en base al diagrama de clases que se encuentra en el archivo compartido en la página 27 del PDF. Incluya componentes e interfaces dentro del modelo.

Fecha de entrega miércoles 13 de noviembre 2013.

https://drive.google.com/file/d/0B4wukMfAIfuAU1dHcDZDTzhFWW8/edit?usp=sharing

El éxito es dependiente del esfuerzo.
Sófocles

jueves, 7 de noviembre de 2013

lunes, 26 de agosto de 2013

Sobre la propuesta de los proyectos de software.



En la propuesta pueden ir los siguientes artefactos:
  • Documento descriptivo.
  • Lista de requerimientos.
  • Lista de requerimientos candidatos.
  • Lista de restricciones del sistema.
  • Diagramas de casos de uso.
  • Diagramas de Gantt.
  • Cotización del proyecto.
  • Roles y personas involucradas en el proyecto.
  •  Estudio de mercado (si se requiere).
  • Contratos legales.
      Recordando que un artefacto puede ser cualquier documento, diagrama o interfaz que nos sirva para analizar de manera correcta la funcionalidad del sistema, así como también de documentar nuestro trabajo.


viernes, 9 de agosto de 2013

Cursos Gratis en Internet.

Les recomiendo este sitio de Internet para tomar cursos de lo que ustedes quieran. Hay algunos que están en español. La mayoría son en inglés, pero vale la pena tomar cursos de otras universidades.

https://www.coursera.org/


viernes, 17 de mayo de 2013

Servicio Rest para el proyecto.

Basado en el proyecto de los tamáles, aquí les dejo el código para que lo acoplen a su proyecto.


<?php
/*
 * Api de tamales_online que arrojará los precios de los tamales
 * tipo Json.
 */
function get_tamales_list(){
    
    //Iniciamos la consulta de la tabla de tamales.

    $conexion = mysql_connect('localhost', 'srtamal', 'cTt9HNfRYPZQdcCZ') or die("No se pudo conectar: ".  mysql_error());
        mysql_query('SET NAME utf8');

        mysql_select_db('tamalesol')or die("No se pudo conectar la BD".mysql_error());
        
        $sql = "SELECT * from tamales";
        
$rs = mysql_query($sql,$conexion) or die ("No se realizó la consulta". mysql_error());
        
        $resp = array(); //rest
        
        while($fila = mysql_fetch_object($rs)){
            
            $resp[] = $fila;
            
        }
         mysql_free_result($rs);
         mysql_close($conexion);
         
         return json_encode($resp); //Buscar para xml
}

function get_tamales_list2(){
    
    //Iniciamos la consulta de la tabla de tamales.

    $conexion = mysql_connect('localhost', 'srtamal', 'cTt9HNfRYPZQdcCZ') or die("No se pudo conectar: ".  mysql_error());
        mysql_query('SET NAME utf8');

        mysql_select_db('tamalesol')or die("No se pudo conectar la BD".mysql_error());
        
        $sql = "SELECT * from tamales where idTamal = 3";
        $rs = mysql_query($sql,$conexion) or die ("No se realizó la consulta". mysql_error());
        
        $resp = array(); 
        
        while($fila = mysql_fetch_object($rs)){
            
            $resp[] = $fila;
            
        }
         mysql_free_result($rs);
         mysql_close($conexion);
         
         return json_encode($resp);
}



$possible_url = array($_GET["action"]);

$value = "A ocurrido un error!";

if (isset($_GET["action"]) && in_array($_GET["action"], $possible_url))
//if (isset($_GET["action"]))
{
  switch ($_GET["action"])
  {
      case "tamales":
        $value = get_tamales_list();
        break;
      
 case "tamales2":
$value = get_tamales_list2();
break;
default:
$value = "Error, sin action.";
//break;
    }
}
exit($value);

//Escribir sin comillas los valores de la variable action.
//http://localhost:8080/tamalesol/catalogo/tamales.php?action=tamales

?>

jueves, 25 de abril de 2013

Interactividad con OpenGL.


Cuando se programa con la librería GLUT.H OpenGL es encargado de detectar cualquier evento que se genera durante la ejecución de la aplicación, y de esta manera mandar llamar una funcion definida por el programador donde se puede especificar, mediante estructuras y variables, como es que se debe responder o que cambios se deben hacer al registrarse dicho evento. Los eventos mas comunes son los generados por el raton, el teclado, el mismo procesador y eventos basados en tiempo. Cuando se programa con OpenGL y no se utiliza la libreria glut.h, entonces la detección y administración de los eventos corre acargo del lenguaje sobre el que esta ejecutando y compilando OpenGL.

Tiempo Real

Se denomina aplicaciones de tiempo real, aquellas que van ejecutando cálculos mientras van desplegando las imágenes. Esto es util para lograr que la interactvidad del  usuario sea mas natural y realista, ya que al generar un evento en el que el usuario presiona un tecla, entonces se puede cambiar alguna variable y obligar a redibujar la escena realizando de nueva cuenta todos los cálculos que son necesarios. El tiempo real es muy utilizado en simulaciones, videojuegos, programas de diseño e incluso en animaciones. La principal desventaja de esta tecnica es que las computadoras requieren mayor poder de cómputo y muchas veces la calidad grafica no es la optima.

Por otro lado se tiene el manejo de graficas precalculadas o bien graficas en tiempo muerto, en las cuales todos los cálculos matemáticos se encuentran realizados previamente, con lo que el procesador solo se limita a mostrar solo una secuencia de imágenes. Esta técnica es muy útil para generar animaciones, películas, DVD’s etc.Su principal ventaja es el lograr graficas de alta calidad, pero requieren mayor cantidad de memoria para que puedan funcionar.

Funciones para interactividad con OpenGL
-          glutIdleFunc
-          glutMouseFunc
-          gluMotionFunc
-          glutPassiveFunc
-          glutKeyboardFunc
-          glutSpecialFunc
-          glutTimerFunc

glutIdleFunc

Esta función se manda a ejecutar cada vez que el procesador este inactivo, por lo que cada vez que el procesador no tenga nada que hacer se disparara este evento. Funciones de este tipo pueden ser muy utiles para hacer animaciones, solo que estas dependen de la velocidad del microprocesador, del tamaño de la ventana y de la resolucion de la pantalla para determinar la velocidad a la que correrá la animación.

            void glutIdleFunc(nombre_función);

glutMouseFunc
Esta función se manda llamar cada vez que se presiona o se libera un boton del mouse.

            void glutMouseFunc(nombre función);

Nombre función = void nombre función(int, int, int,int);


Boton que se presiona o libera:
-          GLUT_RIGHT_BUTTON
-          GLUT_LEFT_BUTTON
-          GLUT_MIDDLE_BUTTON

Estado del boton:
-          GLUT_UP
-          GLUT_DOWN

Posición:
La posición en pixeles del cursor del Mouse relativa a la ventana(x,y)

glutMotionFunc y glutPassiveFunc
Esta función se manda llamar cada vez que ocurra un desplazamiento del mouse, mientras se presiona un boton.

            void glutMotionFunc(nombre función);

            Nombre función = void nombre(int x, int y);






glutPassiveFunc
Esta función se manda llamar cuando se mueve el mouse sin mantener presionado ningun boton.
            void glutPassiveFunc(nombre función);

            Nombre función = void nombre(int x, int y);

glutKeyboardFunc
 Esta función se manda llamar cada vez que se presiona una tecla que tiene codigo ASCII definido, es decir, este evento se genera al presionar teclas de letras, números, signos de puntuación, ortográficos, y otras teclas especiales como el enter, el tab, barra espaciadora, escape, suprimir, etc.

            void KeyboardFun(nombre función);

            void nombre función = (unsigned char, int , int);

glutSpecialFunc
Esta función se ejecuta cada vez que se presiona una tecla que no tiene codigo ASCII y que OpenGL maneja como tecla especial, se puede decir que es el complemento de la función anterior.

            voidSpecialFunc(nombre función);
           
            void nombre función(int, int, int);

Constantes:
-          GLUT_KEY_F1
-          GLUT_KEY_F2
-          GLUT_KEY_F12
-          GLUT_KEY_UP
-          GLUT_KEY_DOWN
-          GLUT_KEY_LEFT
-          GLUT_KEY_RIGHT
-          GLUT_KEY_INSERT
-          GLUT_KEY_HOME
-          GLUT_KEY_END
-          GLUT_KEY_PAGE_DOWN
-          GLUT_KEY_PAGE_UP

glutTimerFunc
Esta función se ejecuta despues de un cierto tiempo, el cual se especifica en milisegundos, esta función puede ser muy util para generar animaciones que no dependan de la velocidad del micorprocesador. La principal diferencia con la función glutIdleFunc es que la función glutTimerFunc no se manda llamar sola indefinidamente, por lo que si se desea generar la animacion sea necesario llamarla recursivamente de manera explicita.

            void glutTimerFunc(int tiempo, nombrefuncion, int parametro);