jueves, 23 de febrero de 2012

ME MUDE DE BLOG

Por cuestiones de comodidad, para enlazar mi cuenta con Google+, me mude a un nuevo dominio:

 
Las nuevas entradas seran publicadas en la nueva dirección.
Gracias.

miércoles, 22 de febrero de 2012

¿Te cambiarias a Linux?

Últimamente se esta hablando un poco más del software libre. Entre todo ello se encuentra este excelente Sistema Operativo, libre y gratuito, Linux. Bueno no es ninguna novedad, existe ya hace dos décadas, pero a pesar de ello todavía hay muy poca gente que lo utiliza, teniendo en cuenta a Microsoft Windows.
Por eso decidi hacer esta encuesta, para saber si ya usan Linux como su SO principal, si lo usan pero como SO secundario, si piensan usarlo alguna vez, o si directamente no se les paso por la cabeza, también pueden comentar sobre los cambios que quiseran que haya en este sistema operativo.
La votación esta a la derecha del blog.

martes, 21 de febrero de 2012

Linux From Scratch

Paralelamente al proyecto de inteligencia artificial, hace unos días empece a trabajar con Linux From Scratch (Linux desde 0).
Para lo que no lo conocen, LFS, es un manual que tiene los pasos para crear un sistema Linux desde cero, compilando e instalando paquetes, los que nosotros queramos, para finalmente crear nuestro SO, también dispone de un Live CD, que pueden encontrar en Linux From Scratch, al igual que su manual.

Ya desde hace un tiempo quería empezar con un sistema operativo o modificar alguna distro de Linux, pero...la documentación que encontraba se basaba en hacer solo algunos cambios. En cambio con LFS, empezamos desde 0, instalando compiladores C, etc, más adelante también podemos incluir Python :)!
Con el tiempo, seguro subo algunos avances ;), estoy haciendo todo en una Pentium II con 168mb de RAM y les digo...que hay que tener paciencia a la hora de compilar grandes paquetes como el GCC (el compilador de C) y Glibc (las librerías de C).

lunes, 13 de febrero de 2012

¿Qué es un agente?

Si leyeron el post anterior, seguro que prestaron atención a la palabra agente, no, no se trata de los personajes de Matrix que persiguen a Neo, al final aclaraba que era el software de la inteligencia artificial. ¿El software de la inteligencia artificial?, claro a lo mejor me explique un poco mal, por que lo que quería yo era nada más darles un pie para después en un post futuro (este), explicarles mejor de que se trata.

Se llama agente a la aplicación que se programa para que resuelva  determinado problema utilizando la inteligencia artificial.
Hay varios tipos de entornos o de problemas:

domingo, 12 de febrero de 2012

¿Donde aplicar la Inteligencia Artificial?

En los post anteriores hable sobre la inteligencia artificial e hice una breve descripción de las RNA y de los AG. Pero lo que todavía no dije, fue en dónde o en que situación se puede aplicar un agente1.
Un agente puede ser utilizado en toda situación en la que se necesite resolver un problema, ¿un problema?, si, por ejemplo, supongamos que tenemos que ir de "x" lugar a "y", tenemos una sola posibilidad de hacer el viaje, pero la trampa esta en que el recorrido tiene que ser el más corto. Podemos hacer dos cosas en esta situación, la primera es tirarnos al azar por cualquier camino y llegar sin saber durante el recorrido si ese fue el trayecto más corto, o podemos programar un agente que por medio de un mapa pueda seleccionar el camino más adecuado, en nuestro caso, el más corto.
Si alguna vez leyeron sobre la inteligencia artificial, el ejemplo que les di antes, es uno de los más usuales, por lo general, muchos se quedan con ese ejemplo, y solamente se imaginan usar la IA para realizar un recorrido, pero se puede aplicar en muchas otras cosas.
Entonces...¿dónde podemos aplicar el uso de un agente?, el limite esta en nuestra imaginación, en nuestro desempeño y en las leyes de la física :p.

jueves, 19 de enero de 2012

Redes Neuronales Artificiales y Algoritmos Genéticos

Para empezar a programar el Ajedrez inteligente en Python, estoy comenzando a profundizar un poco más en el campo de la Inteligencia Artificial (IA), estudiando Redes Neuronales Artificiales (RNA) y Algoritmos Genéticos (AG).

¿Porqué se llaman Redes Neuronales Artificiales?, básicamente porque se intenta representar artificialmente al conjunto de celulas nerviosas de nuestro cerebro.

¿Porqué se llaman Algoritmos Genéticos?, como sabemos, un algoritmo es un conjunto de pasos que se deben realizar para cumplir "x" objetivo, al añadirle la palabra "genéticos", estamos diciendo que se tratara de un algoritmo capaz de evolucionar.

Las RNA, se encargan de decidir el comportamiento en este caso del ordenador, mientras que los AG, ayudaran al aprendizaje del ordenador.
Es decir que se necesitan mutuamente, para realizar movimientos, con ayuda de las RNA que luego si son erróneos serán corregidos para futuras partidas por el AG.

martes, 3 de enero de 2012

Ajedrez en Python [3]


Hace unos minutos estuve hablando con un amigo, y como sugerencia, consejo, me dijo que la idea de hacer el ajedrez con "if-else", era prácticamente imposible. Creo que tengo que ir por otros métodos para encarar el proyecto, algo que me nombro y me resulto bastante interesante fue que tendría que empezar con los algoritmos genéticos o redes neuronales, por lo cual ya me puse a leer material.
Me va a llevar un poco de estudio todo esto, pero igualmente voy a subir seguido mis avances en este campo de lo que básicamente seria inteligencia artificial.

Ajedrez en Python [2]


Hoy me senté frente al monitor, con un ajedrez al lado, y me puse  a hacer movidas aleatorias, con sus posibles contraataques.
Lo que intento hacer es que el código responda con la mejor movida, sin que esta sea al azar ("que piense").
Por el momento lo que se me ocurre es utilizar un sistema de if-else, pero también lo que necesito es guardar las movidas en variables, para que se sepa cuando un casillero esta ocupado o no, si esa pieza ya se movió y esta en otra parte, o si ya no esta sobre el tablero.
Por ahora, solo hice muy pocas movidas, y estas no quedan registradas, el siguiente paso sera registrarlas para evitar desplazamientos imposibles.

Se viene una noche bastante larga...con café al lado.

domingo, 1 de enero de 2012

Ajedrez en Python [1]

Kasparov vs. Deep Blue


Hace unos días estaba jugando ajedrez y se me paso por la cabeza hacer un "mini" programa en Python que emule ser un jugador de ajedrez, sin interfaz gráfica por el momento, solo por linea de comandos.
Como desafío de 2012, me propongo comenzar con la programación de un código que permita ingresar la pieza y posición de la misma para que luego decida cual es el movimiento correcto a hacer.
Por ahora voy a comenzar a maquetear todo con lapicera y papel para después ir dandome un poco de maña con el código.
Los avances se irán subiendo al blog, no se con que frecuencia, pero por lo menos los subire una vez por semana.

viernes, 23 de septiembre de 2011

Sentencias condicionales Python

Ahora que ya sabemos como funcionan las variables y los operadores, vamos a empezar a trabajar con las sentencias condicionales, un tipo de control de flujo.
Una sentencia condicional, se basa en una "regla" que cumplir, si se cumple, se realiza una cosa, si no se cumple, se realiza otra. Antes de empezar a programar, lo bueno es en una hoja de papel, hacer un esquema, partiendo de la primer instrucción a realizar, utilizando un lenguaje no necesariamente de programación, si no uno que pueda ser interpretado por nosotros para luego pasarlo a Python, vamos a ver un ejemplo, lo que quiero hacer, es que mi programa me diga si el número es mayor o menor a 10, empecemos...

jueves, 22 de septiembre de 2011

Operadores en Python

Para que un programa funcione haciendo operaciones aritméticas/logicas, lo que se necesita es contar con los operadores.
Los operadores, hay varios, los más normales son los que todos conocemos en la vida cotidiana:
  • + = Suma
  • - = Resta
  • * = Multiplicación
  • /  = División
  • ** = Potenciación
Estos operadores son binarios, es decir necesitan dos números para funcionar, es algo logico, ya sabemos que para sumar se necesitan por lo menos dos valores, al igual que para restar, potenciar...etc.
Su funcionamiento es demasiado simple, así que no van a tener problemas.

martes, 20 de septiembre de 2011

Variables en Python

En las entradas anteriores hablamos sobre de que se trata y las herramientas necesarias para comenzar con Python, pero ahora que ya sabemos todo eso, vamos a meternos en el codigo. Voy a intentar ser lo más claro para que entiendan bien lo que es una variable.
Una variable es una porción de la memoria a la cual le asignamos un nombre y un valor que puede variar. En esa oración resumimos totalmente el concepto de variable.
Voy a mostrarles un gráfico, para que lo entiendan mejor:

lunes, 19 de septiembre de 2011

Herramientas para el desarrollo en Python

Ya hablamos en las entradas anteriores de: de que se trata el lenguaje de programación Python. Pero lo que nos falta para emepezar son las herramientas necesarias para empezar a programar. Lo principal es descargar e instalar el interprete, pueden descargarlo desde su Web Oficial:
http://www.python.org/getit/releases/3.2/, en este caso se trata de la última versión, Python 3.2. Una vez instalado el interprete, podemos empezar a escribir codigo en cualquier bloc de notas, como el de windows, el gedit de linux, etc., con el cual guardamos nuestro codigo con la extensión ".py", para luego ejecutarlo desde el interprete.
Por ejemplo, abran el bloc de notas, escriban la siguiente linea:

Ahora guarden el documento como "hola.py", en este caso estoy utilizando Windows asi que lo que voy a hacer es ejecutar la cmd (van a inicio-ejecutar-cmd), esta ventana negra que se nos abrio es la consola, por ahora nos manejaremos desde aca (si usan linux, se llama terminal). Una vez que abrieron la consola lo principal es indicarle donde tenemos instalado el interprete, en mi caso esta en el C:\, asi que se lo indicamos de la siguiente forma:

Caracteristicas de Python

En la entrada anterior, dimos un poco de historia de python y también comparamos un grande de la programación; C, con Python. que apesar de haber sido inventado ya hace unos 20 años, su explendor comenzo hace muy poco tiempo.
Lo que voy a hacer, es presentarles una lista de las caracteristicas más destacables de Python.
  • Es muy fácil de aprender y tipear.
  • Es de codigo abierto.
  • Lenguaje de alto nivel.
  • Es portable (puede ser utilizado en sistemas...Linux, Windows, Macintosh, Android y Simbyan OS)
  • Es orientado a objetos.
  • Se puede combinar con otros lenguajes, como C.
  • Extensas librerias.

Programando en Python


Después de varios días sin escribir, vuelvo, esta vez hablandoles del excelente lenguaje de programación Python, una introducción.
Empecemos con un poco de historia, Python es un lenguaje de programación de codigo abierto y de alto nivel (esto quiere decir que su escritura es más natural y más entendible que el lenguaje maquina que es de bajo nivel), creado en 1991, por Guido van Russum, actualmente se encuentra en su versión 3.2, y es compatible con Linux, Windows y Macintosh.

miércoles, 3 de agosto de 2011

Programador PIC [Parte 3]

Puerto RS232, para conectar a la computadora.
 Me ausente unos días, porque tuve un problema. Al estar terminando de soldar la placa anterior...tuve un pequeño inconveniente que me obligo a dejar de trabajar sobre ella y a empezar una nueva. El trabajo es el mismo, nada más que esta vez utilice una placa pertinax de doble faz. Ya estan todos los componentes soldados. Ahora, simplemente hace falta probarlo.

miércoles, 20 de julio de 2011

Programador PIC [Parte 2]

Soldando los componentes para JDM PLUS - foto propia
Ya estoy soldando los componentes, al principio me costo, si ven del post anterior, se darán cuenta que las pistas y pad en algunos lugares esta muy juntas.
Por ahora todo marcha bien, ahora hay que agregarle el puerto serial,  los zócalos un led de indicación y una caja para el montaje.

sábado, 16 de julio de 2011

Programador PIC [Parte 1]

JDM PLUS sacado del Cloruro Férrico - Fotografía propia

En busca de un programador de PICs, me encontré con algunos que eran un robo muy caros y otros que eran muy baratos. Hasta ese momento tenia pensado comprarlo. Pero después pensé, para que lo voy a hacer si lo puedo hacer yo mismo sin ningún problema.
Entonces comencé a buscar documentación sobre ello, y encontré el JDM PLUS, un programador de PICs por puerto serial D9. Lo vi muy sencillo de realizar y comprando los componentes seria muchisimo más barato hacerlo que comprarlo, pero más que nada, es una satifacción ver que algo funcione...y sobre todo que haya sido echo por uno mismo.