Laberinto en Java3D


Java3D - Laberinto from ces2601 on Vimeo.

Reportes con PHP, MySQL, Apache y Wordpress


Se tiene previamente instalado y configurado:

y vamos a trabajar con 

Vamos a explicar primero lo que queremos hacer, queremos obtener un reporte que nos muestre los records de los jugadores que han ganado nuestro juego, para ellos disponemos de un laberinto hecho en Java3D, en el cual cuando se llega a la meta, se anota el tiempo y se inserta en la base de datos, luego queremos consultar los tiempo ordenados del mejor en adelante.

Para poder ejecutar codigo PHP en Wordpress he usado el pluging Exec-PHP. Primero hacemos la coneccion con la base de datos MySQL,

$server="192.168.153.1";
$usuario="root";
$pass="123";
$db="laberinto";

$link=mysql_connect($server,$usuario,$pass)or die (exit(mysql_error()));
mysql_select_db($db);

Y ahora para mostrar el reporte vamos a usar "print" para las salidas en HTML, primero ponemos el titulo y la cabecera de la tabla:
print "Facil";
print "< table border=1><td>Nombre</td><td>Modo</td><td>Tiempo [hh:mm:ss]";

Luego con una consulta a la base de datos obtenemos los datos que queremos mostrar:
$sqlx="Select * from ganadores where modo='facil' order by hora, minuto, segundo ";
$rsx = mysql_query($sqlx) or die(exit("Error"));

Con los datos obtenidos vamos generando el codigo HTML en formato de tabla
while($rowx=mysql_fetch_array($rsx)){
     print "".$rowx["nombre"]."".$rowx["modo"]."".$rowx["hora"].":".$rowx["minuto"].":".$rowx["segundo"]."";
}

Y por ultimo para guardar las buenas practicas, vamos a crear el tag de cierre de la tabla
print "</table>";

Podemos variar los datos, sintaxis, consulta a la base de datos, etc, pero en esencia sera lo mismo, ahora vamos al resultado:


MySQL brindar acceso remoto

Cuando configuramos un servidor de bases de datos con MySQL es importante brindar acceso a los clientes que se desean conectar a la base de datos, por defecto MySQL bloquea todas las conneciones por motivos de seguridad, entonces para brindar acceso tenemos que usar "GRANT"

GRANT [tipo_acceso] ON [base datos/tablas] TO usuario@[host] IDENTIFIED BY [password]

Ejemplo:
Vamos a darle acceso al usuario "root" que accesa desde '192.168.153.128' a la base de datos 'laberinto':

GRANT ALL ON laberinto.* TO root@'192.168.153.128' IDENTIFIED BY '123';

Cronometro en QT usando hilos

Vamos a ver como crear hilos en C\C++ usando QT, y como practica vamos a hacer un cronometro, este ejemplo se ha realizado usando:

Ubuntu 10.04
QDevelop
QTDesigner 4

Lo primero que vamos a hacer es crearnos un nuevo proyecto usando QDevelop, el cual llamaremos hilosQT, luego vamos a fuentes -> clic derecho -> agregar, y vamos a crear una clase para el hilo, la llamaremos hilo.cpp y vemos que también nos crea la cabecera hilo.h


Ahora para editar nuestra interfaz gráfica nos vamos a apoyar en QTDesginer, hacemos doble clic en el archivo: ui/mainwindow.ui y se nos va a abrir QTDesigner, he añadido un botón de inicio, y un widget tipo "lcd display", al final me quedo así:


Ahora regresamos a QDevelop para programar el hilo y los eventos. Editamos el archivo hilo.cpp de manera que se nos cree un ciclo infinito con una pausa de 1 segundo para simular el reloj,

void hilo::run(){

 while(1){

     if(s==59)
     {
      s=0;
      m++;
     }

     if(m==59)
     {
      m=0;
      h++;
     }

s++;  
ventana->lcdNumber->setProperty("intValue", s);
     msleep(1000);
 }

Editamos la cabecera, como vemos en el constructor le pasamos nuestra "gui" para poder actualizar el display.


class hilo : public QThread
{
public:
void run();
hilo(MainWindowImpl *gui);
MainWindowImpl *ventana;
int h, m ,s;
};



Para agregar el evento del boton, vamos a crear un metodo que se llame "iniciarCronometro()" y lo definimos en la cabecera de nuestra ventana principal, en el archivo fuente le ponemos el evento al boton y definimos las acciones del metodo:


hilo *crono;

MainWindowImpl::MainWindowImpl( QWidget * parent, Qt::WFlags f) 
: QMainWindow(parent, f)
{
setupUi(this);
connect(pushButtonIniciar, SIGNAL(clicked()), this, SLOT(iniciarCronometro()));
}

void MainWindowImpl::iniciarCronometro()
{
crono = new hilo(this);
crono->start();
}

Ahora lo interesante, vamos a probarlo!!.. si todo va bien nos debería quedar así, si queréis el código fuente puedo compartirlo!..



Citas informáticas

Código

”El buen código es su mejor documentación”
— Steve McConnell

”Cualquier código tuyo que no hayas mirado en los últimos seis meses o más es como si lo hubiese escrito otro”
— Eagleson’s Law

”El primer 90% del código corresponde al primer 90% del tiempo de desarrollo. El 10% restante corresponde al otro 90% del desarrollo”
— Tom Cargill



Desarrollo de software

“Los buenos programadores usan sus cerebros, pero unas buenas directrices nos ahorran de tener que hacerlo en cada caso”
— Francis Glassborow

”En software, muy raramente partimos de requisitos con sentido. Incluso teniéndolos, la única medida del éxito que importa es si nuestra solución resuelve la cambiante idea que el cliente tiene de lo que es su problema”
— Jeff Atwood

”Considerando el lamentable estado de nuestras aplicaciones informáticas actuales, el desarrollo de software es todavía un arte oscuro, y no puede ser aún considerado una ingeniería”
— Bill Clinton

”No puedes crear un gran software sin un gran equipo, y la mayoría de los equipos de desarrollo se comportan como familias disfuncionales”
— Jim McCarthy



Depuración

”Tan pronto como comenzamos a programar encontramos, para nuestra sorpresa, que crear programas correctos no era tan fácil como habíamos pensado. Tuvo que descubrirse la depuración. Puedo recordar el instante exacto en el que me dí cuenta que una gran parte de mi vida desde entonces iba a pasarla encontrando errores en mis propios programas”
— Maurice Wilkes descubre la depuración, 1949

”Depurar es al menos dos veces más duro que escribir el código por primera vez. Por tanto, si tu escribes el código de la forma más inteligente posible no serás, por definición, lo suficientemente inteligente para depurarlo”
– Brian Kernighan

”Si la depuración es el proceso de eliminar errores, entonces la programación debe ser el proceso de introducirlos”
— Edsger W. Dijkstra



Calidad

”¡No me importa si funciona en tu máquina! ¡No estamos vendiendo tu máquina!”
— Vidiu Platon

”Programar es como el sexo: un único error y tienes que estar soportándolo toda la vida”
— Michael Sinz

“Hay dos formas de escribir programas sin errores; sólo la tercera funciona”
— Alan J. Perlis

”Puedes tener un software de calidad o puedes tener aritmética de punteros, pero no puedes tener ambas cosas al mismo tiempo”
— Bertrand Meyer

”Si McDonnalds funcionara como una compañía de software, uno de cada cien Big Macs te envenenarían, y la respuesta sería ‘lo sentimos, aquí tiene un cupón para dos más’”
— Mark Minasi

“Codifica siempre como si la persona que finalmente mantendrá tu código fuera un psicópata violento que sabe dónde vives”
— Martin Golding

”Cometer errores es humano, pero para estropear realmente las cosas necesitas un ordenador”
— Paul Ehrlich

”Un ordenador te permite cometer más errores y más rápido que cualquier otra invención en la historia de la humanidad, con las posibles excepciones de las pistolas y el tequila”
— Mitch Radcliffe



Predicciones

”Todo lo que puede ser inventado ha sido ya inventado”
— Charles H. Duell, Comisario de oficina de Patentes en EEUU, en 1899

”Pienso que hay mercado en el mundo como para unos cinco ordenadores”
— Thomas J. Watson, Presidente de la Junta Directiva de IBM, sobre 1948

“Podría parecer que hemos llegado a los límites alcanzables por la tecnología informática, aunque uno debe ser prudente con estas afirmaciones, pues tienden a sonar bastante tontas en cinco años”
— John Von Neumann, sobre 1949

“Pero, ¿para qué puede valer eso?”
— Ingeniero en la división de sistemas informáticos avanzados de IBM, hablando sobre los microchips, en 1968

”No hay ninguna razón para que un individuo tenga un ordenador en su casa”
— Ken Olson, Presidente de Digital Equipment Corporation, en 1977

”640K deberían ser suficientes para todo el mundo”
— Bill Gates, 1981

”Windows NT podrá direccionar 2GB de RAM, que es más de lo que cualquier aplicación va a necesitar jamás”
— Microsoft, durante el desarrollo de Windows NT, en 1992

”Nunca seremos realmente una sociedad sin papeles hasta que la gente de la Palm Pilot creen ‘WipeMe 1.0′”
— Andy Pierson
(Nota: Wipe es la traducción de toallita de papel)

“Si las cosas siguen así, al hombre se le atrofiarán todas sus extremidades excepto los dedos de pulsar los botones”
— Frank Lloyd Wright