Ir al contenido principal

Entradas

Mostrando las entradas de agosto, 2010

Animacion Java2d Funciones Senoidales

Animación en java 2d, dibuja pelotas siguiendo la trayectoria de funcione de la forma R = SIN( K T ), se inicia la animación con la tecla S, se pueden agregar elementos a la animación con la tecla  A y la tecla Q, ademas cambiar el color con C y quitar elementos con R, ademas dibujar o borrar el fondo con F Descargar codigo fuente

Como Hacer un Juego en Java 2D

Este programa integra varios elementos clave para el desarrollo de un juego, consiste en una bola simple que rebota en los lados del formulario, ademas el usuario puede tomar el control de la bola usando las teclas de dirección, para iniciar el juego se debe presionar la tecla S, con las teclas + y - se puede ajustar la velocidad de la pelota, ademas se puede controlar los FPS con la tecla A y Z (si se lanza desde consola, se pueden ver las fps actuales en la consola), la bola cambia de dirección con la tecla R, o con un click del ratón. Descargar Codigo Fuente

Pelotas que rebotan, animación Java 2D

otra animación en Java2D esta consiste en dos pelotas que rebotan y que cambian de dirección de forma periódica, incluye importantes cambios como por ejemplo un FPS constante en 30, eso se hace modificando el delay entre cada frame, y adaptándolo según la duración del periodo de render y actualización de estado. Descargar Codigo Fuente

Animación en Java2D Gráfica de Pie

Este ejemplo de la serie de animaciones que he realizado, también con ciclo de render activo, muestra un circulo dividido en sectores, que gira en un sentido, a la vez que se demuestra el control de la animación con el teclado, se puede usar la tecla C para cambiar los colores, la tecla D y L para cambiar las lineas que se dibujan dentro del circulo, y ademas la Flecha arriba y Flecha Abajo para aumentar y disminuir el numero de sectores de la animación. Descargar Codigo Fuente

Uso básico de la pila Gnu Assembler (GAS)

Uno de los elementos clave en el proceso de aprender a programar en ensamblador es el uso de la pila, de forma típica la pila se utiliza en el paso de parámetros a métodos, pero también se acostumbra usar para guardar valores de registros, es decir, si un registro se usa en un método, el valor anterior del registro puede ser preservado, también para guardar por ejemplo los bits de estado para que una llamada a un método no afecte el estado, en este ejemplo se crea un procedimiento que preserva los valores de los registros que utiliza, y se demuestra guardando un valor en el registro antes de una llamada y luego usando un salto para omitir el segundo mensaje. . text . global _start _start: # write msg movl $len , % edx movl $msg , % ecx #invocar el procedimiento call PrintMsg movl $100 , % eax # guardar 100 en eax call PrintMsg cmpl $100 , % eax # comparar 100 con eax je salir # si eax es igual a 1

20Q.net el adivino con Inteligencia Artificial

Resulta muy interesante encontrar aplicaciones que utilizan inteligencia artificial, esta en particular ( 20Q ) resulta sorprendente a primera vista, porque a veces logra descubrir rápidamente lo que "pensamos", básicamente el juego consiste en que nosotros como jugadores, pensemos en un objeto, luego el programa tratara de hacernos la menor cantidad de preguntas, hasta dar con el objeto que seleccionamos al principio, el juego tiene algunas de las características básicas de un agente inteligente, que actúa de forma racional, es capaz de aprender a medida que mas personas juegan y poco a poco afinar que preguntas y sus respuestas corresponden a dados objetos, un hecho que casi pasa desapercibido es que nos pregunta por nuestra edad, nacionalidad y genero, esto le permite al juego desde mi parecer, tener un conjunto mas especifico de respuestas, a la hora de usar nuestro perfil para saber que preguntas hacer. otro aspecto importante es que empieza con preguntas muy generales,

Linux programar módulos para el Kernel en C

Este post busca ser una guia básica para crear módulos del kernel, entre el código fuente se encuentran tres modulos, se expone la forma de comunicar varios módulos, ademas también como crear un punto de entrada en el sistema de archivos virtual "proc" para poder establecer comunicación con los módulos desde espacio de usuario, los módulos dependen entre si de la siguiente forma, el modulo C no depende de nadie, el modulo B depende de C y el modulo A depende de B, asi que el primer modulo en ser insertado al kernel usando "insmod" es el modulo C , luego el modulo B y por ultimo el modulo A , el modulo A es el unico que incluye codigo para crear un archivo virtual en proc, este archivo se llama rudyMA código fuente del modulo mas simple # include < linux/module.h > # include < linux/kernel.h > void rudy_procesar_modulo_c ( char * mensaje ) { printk ( KERN_INFO " RUDY_MODULO_C %s " , mensaje ) ; } int init_module ( void ) {

Breaking the code, Alan Turing

Un extracto de la película “Breaking the code” en la cual se recogen algunos hechos biográficos de la vida de Alan Turing, importante matemático del siglo XX que fijo las bases del modelo computacional que implementan nuestras modernas computadoras, la película se centra en una etapa de su vida en la que trabajo para el gobierno Ingles, tratando de descifrar el código usado por los alemanes en sus comunicaciones secretas, la famosa maquina “enigma”, en este fragmento de la película se presenta una interesante exposición de parte de Turing, tratando de explicar en forma general el tema de sus investigaciones, los problemas de decisión, es interesante conocer que otros matemáticos como Bertrand Russell en su intento de formalizar toda la matemática, descomponiendo cada concepto a un nivel tal, que fuera posible derivar toda la matemática a partir de sus axiomas usando puramente lógica.  Esta idea fue plasmada por Bertrand Russell en su libro “principia mathematica” el cual no logro su co

Resolución de Pantalla Debian Gnu/Linux en Virtual Box

Uno de los problemas que se presentan al trabajar con maquinas virtuales es el asunto de la resolución de pantalla, si se configura el sistema huésped con el driver genérico "vesa"  se puede tener una resolución fija, pero si nuestro sistema anfitrión tiene una pantalla ancha, o ajustamos el tamaño de la ventana y queremos que el sistema huésped también ajuste su resolución nos encontramos con la necesidad de instalar Virtual Box Guest Additions, para los sistemas Linux la instalación de estas herramientas en forma de módulos del kernel, requiere que nuestro sistema este configurado para poder compilar módulos, estos pasos a veces no están muy claros, y el instalador de guest additions simplemente falla indicando que nuestro sistema no puede compilar módulos, en este vídeo muestro paso a paso como instalar los paquetes necesarios para que nuestro sistema pueda compilar módulos para el kernel, y finalmente como instalar el guest additions para lograr integración de la resoluci

Procedimientos en Ensamblador Gnu Assembler (GAS)

Los procedimientos o subrutinas son una forma básica para reutilizar código, y ademas una forma simple de abstracción que nos permite crear secuencias de acciones que tienen como fin llevar a cabo una tarea, que puede ser útil en diferentes contextos, por lo que se requiere invocar dicho grupo de instrucciones, y regresar al punto desde donde fueron invocadas, normalmente se hacen versiones generales de alguna tarea, que recibe ciertos parámetros para personalizar su comportamiento, en este ejemplo vamos a crear un procedimiento simple que permite imprimir un mensaje en pantalla usando la llamada del sistema "write" , sin tener que repetir las instrucciones para invocar la interrupción 0x80. un procedimiento se define como una etiqueta normal, pero tiene la característica de que cuenta con una instrucción "ret" al final del cuerpo del procedimiento para indicar que se regrese el control al punto desde donde se invoca, y ademas para llamar un procedimiento se debe us

Como usar System.out.println

Uno de los conceptos básicos al momento de hacer un programa, es la entrada y salida de datos, básicamente cualquier programa cuenta con tres flujos de datos (streams) elementales, que representan la entrada estandar (in), la salida estándar (out) y la salida de errores (err), normalmente en un programa de consola estos flujos están conectados de la siguiente manera teclado -> in  out -> pantalla err -> pantalla en la instrucción "System.out.println", hacemos uso de la clase System , la cual contiene varios métodos y campos estáticos, que son útiles a cualquier programa. "out" es una variable miembro de la clase System, declarada como static y del tipo PrintStream  esta variable miembro representa el flujo de datos asociado con la salida de nuestro programa, como vimos antes, esto normalmente es la pantalla.  y finalmente println()  es un método de la clase  PrintStream  que imprime el mensaje que pasamos como parámetro en el flujo de datos, y agrega

Fundamentos de Inteligencia Artificial

La Inteligencia Artificial es una ciencia muy joven que se estructura  a partir de muchas otras disciplinas, que desde hace mucho tiempo ocupan a las grandes mentes de la humanidad, podemos remontar los orígenes de la inteligencia artificial al momento en que los primeros filósofos empezaron a cuestionarse acerca de la naturaleza misma del pensamiento humano, Aristóteles pionero en tratar de aclarar los misterios de la inteligencia, se atrevió a formular un grupo de leyes que trataban de explicar la parte racional de la inteligencia. Desarrollo un sistema informal para razonar usando silogismos, que permitía extraer conclusiones de forma mecánica a partir de premisas iníciales. Podemos decir que la filosofía aporta muchos puntos de vista, sobre el tema de la inteligencia, incluso se desarrollaron algoritmos para tratar de explicar el funcionamiento de la razón y el pensamiento, en términos modernos podemos decir que la filosofía genero los primeros esfuerzos por entender y modelar el p

Salto Incondicional JMP en Gnu Assembler (GAS)

Los saltos son la forma básica de control de flujo en lenguaje ensamblador, un salto acompañado de una etiqueta de destino, nos permite llevar al procesador a ejecutar en cualquier región de nuestro código. en este ejemplo, veremos la forma mas básica de salto, el salto incondicional, el cual modifica el flujo del programa, y lo dirige hacia una etiqueta definida. como primer paso para entender la forma en la que actúa una instrucción "jmp", vamos a usar un pequeño ejemplo, que imprime dos mensajes en pantalla, uno después de otro en una secuencia simple . text . global _start _start: # write msg movl $len , % edx movl $msg , % ecx movl $1 , % ebx movl $4 , % eax int $ 0x80 # write msg1 movl $len1 , % edx movl $msg1 , % ecx movl $1 , % ebx movl $4 , % eax int $ 0x80 # exit movl $0 , % ebx movl $1 , % eax int $ 0x80 . data     msg: . asci