miércoles, 30 de enero de 2013

Proceso de creacion de una Base de Conocimiento

Actualmente estamos trabajando en una base de conocimiento, hay una serie de caracteristicas que debe 
cumplir el sistema para funcionar de manera logica en un sistema de conocimiento.


Basicamente un sistema de conocimiento esta compuesto por cuatro elementos importantes :

Definiciones
Listas
Grafos
Objetos

Las definiciones de dato son las descriciones de un concepto, lo que hace el concepto y su definicion, o lo 
que hace el conceto en el sistema de conocimientorn cuestion.

Hay varios elementos mas que pueden hacer una base de conocimiento mas completa y por su puesto, sobre tales elementos debe ser posible aplicar ciertas operaciones para que el sistema funcione mucho mejor.

Otro de los factores importantes a la hora de trabajar en una Base de Conocimiento es plantear las futuras aplicaciones del sistema, afin de programar en cierta forma algunas tareas para facilitar el acceso y tratamiento de la informacion.

Una de las aplicaciones inheritas a las Bases de conocimiento son el aprendizaje automatico, tomar decisiones basadas en un sistema con aprendizaje automatico podria parecer un caos, pero todo funcionara bien, si la base de conocimientos funciona bien.

Estamos trabajando con el sistema SIKREL acronimo de Simple Knowledge Representation Language por sus siglas en ingles, no es que sea gringo ni nada por el estilo, pero las siglas de estas cosas se dan mejor en ingles.

El sistema SIKREL funciona como una notacion, programada en python, sera posible hacer representaciones del conocimiento, usando inicialmente una terminal.

El proyecto SIKREL inicio hoy me inspire en los mapas conceptuales y me pregunte, por que no dibujar una especies de mapas conceptuales a los que la computadora pueda entender y responder preguntas basados en los datos proyectados en el mapa conceptual.

Tenemos mucho trabajo por hacer antes de sacar siquiera una version buena, lo cierto es que aqui publicaremos los avances que tengamos en el sistema SIKREL.

lunes, 28 de enero de 2013

Nuevas Herramientas Python

Esta claro que python sera uno de los pilares mas fuertes de NEOPATHIC, ya que al parecer su flexibilidad para resolver problemas y la cantidad de modulos que hay para el, es facil tomar la decicion de trabajar con python.

Vamos a trabajar con nuevas Herramientas para python.

SQLite
Sistema de Base de datos sencilla y facil de implementar para aplicaciones chicas.

SQLAlchemy
Sistema para manejar bases de datos.

Pyglet
Para hacer Animaciones

Curses
Para hacer ambientes graficos en Terminal

Por ahora estas seran nuestras herramientas, ademas de las que ya habiamos hablado, no tardara mucho para que empezemos a publicar nuestro trabajo.

martes, 15 de enero de 2013

Trabajando en Android



Android es un buen sistema Operativo para moviles, por no citarlo como el mejor, por no entrar en discusiones, lo bueno de android es que su programacion es muy sencilla y usarlo es relativamente mas barato.

Hace casi un a~o me incurse en el estudio de android con java, y pues es hora de empezar a sacarle jugo, la primera aplicacion que se me ocurre es una aplicacion de criptografia, que emplee el metodo del cesar y lo podria llamar cripdroid :), bueno vamos a empezar a jugar con eso :).

martes, 8 de enero de 2013

Leyendo Archivo en SCALA

Una vez mas vamos a tocar el lemguaje SCALA, esta vez vamos a leer un sencillo archivo de Texto, el codigo es el siguiente :

object ReadeFile {
    def main(args: Array[String]){
        for(line <- scala.tools.nsc.io.File("hola.txt").lines()){
            println(" - " + line)
        }
    }
}

Usamos la libreria scala.tools.nsc.io.File para extraer el contenido del archivo con la funcion lines() extraemos las lineas del archivo, el for se encarga de recorrer el archivo linea por linea.

El archivo en cuestion hola.txt es leido y mostrado en pantalla. Acontinuacion mi salida con el archivo hola.txt, obviamente se puede poner cualquier nombre de archivo.


BubbleSort con SCALA

Empezando a agarrarle amor a este singular lenguaje SCALA, escribo el codigo del bubblesorting con SCALA.

El codigo es el Siguiente :

object BubbleSort{
   def main(args : Array[String]){
        println("BubbleSorting");
        var a= Array(100,200,2,3,4,5,1,5,7,9,8,5,12,56,23,89,78,76,65,76,444,555,111,101,201,1000,300,200,1,5,4,3,2,1)
        println("Array length :",a.length)
  
        for(i<-0 until a.length by 1){
            for(j<-0 until a.length by 1){
                 if(a(i)<a(j)){
                     var temp = a(i)
                     a(i) = a(j)
                     a(j) = temp
                 }
            }
        }
  
        for(i<-0 until a.length by 1){
            println(a(i))
        }
     }
}

El codigo de escala pareciera ser un poco complejo, pero una vez tomandolo bien, se dijiere rapido.

Metodos de Ordenamiento

Vamos a hacer un review de los metodos de ordenamientos, los listaremos y luego en otros posts nos liaremos con cada uno de ellos...

son :

Metodo de la Burbuja
Metodo de la Burbuja Bidireccional
Metodo por Insercion
Metodo por Mezcla
Metodo Radix
Metodo Shell
Metodo con Arbol Binario
Metodo heapSort
metodo QuickSort

Cada uno de los diferentes metodos de ordenamiento tiene sus pro y sus contra, lo veremos a detalle en posts siguientes.

Hablemos de Robotica #1

La robotica es el dise~o, construccion,operacion, dispocicion estructural, manufactura y aplicacion de los robots.

Un robot es una entida o mecanica artificial, en la practica es un sistema electromecanico que por su apariencia y por sus movimientos ofrece la sensacion de tener proposito propio.

Wikipedia
La robotica combina diversas disciplinas como son :

+ Mecanica
+ Electronica
+ Informatica
+ Inteligencia Artificial
+ Ingenieria de control
+ Fisica

En el estudio de la robotica nos toparemos con diversos problemas que tendran solucion haciendo uso de teorias que son tomadas en cualquiera de las disciplias de arriba.

Los robot suelen ser seres "pensantes", pero tambien se le atribuye el termino a aquellos sistemas que haces una tarea repetitiva, que solo esten programados para hacer algo repetitivo, sin llegar al hecho de "pensarlo" mas bien pura actuacion.

Para llegar a cualquier lado en esto de la robotica primero deberemos entender varios modelos matematicos de solucion a problemas, algebra lineal, calculo, etc , pero tambien podemos logar avances si nos empezamos a meter a la electronica.

Empezar a entender como va todo esto requiere mucho tiempo , esfuerzo y sacrificios, pero al final todo tendra sus recompenzas.

Sin duda este estudio nos llevara de iniciar con robots de todo tipo, desde robots articulados hasta robots esfericos. y hay mucho campo que desarrollar mas relacionados con el uso cotidiano de robots que solo su uso industrial.

Algo que toma mucho juego en el desarrollo de robots es el uso de Sensores y Motores que son quienes le dan vida a los movimientos y "pensamiento" de los robots.

let's Work

lunes, 7 de enero de 2013

Calculando Sumatorias Basicas con Ruby

Indiscutiblemente las sumatorias muchas veces suelen ser una ayuda muy grande cuando estamos resolviendo problemas matematicos... en este caso pongo una solucion a sumatorias simples ... usamos tres funciones :

sum_i : saca sumatorias de numeros sencillos.
sum_ii : saca sumatorias de los numeros al cuadrado.
sum_iii : saca sumatoria de los numeros al cubo.

He aqui el codigo :


Para quienes no sepan que es una sumatoria ... simplemente es la suma de una serie numerica desde un numero inicial hasta un numero final , ejemplo :

 sumatoria de 1 a 5 = 1 + 2 + 3 + 4 + 5 = 15 ... esa es la sumatoria.

def sum_i(to)
    val = 0
    for i in 1..to
        val +=i
    end
    return val
end

def sum_ii(to)
    val = 0
    for i in 1..to
        val += (i*i)
    end
    return val
end

def sum_iii(to)
    val=0
    for i in 1..to
        val+= (i*i*i)
    end
    return val
end

puts sum_i(10)
puts sum_ii(10)
puts sum_iii(10)

Las funciones reciben un unico parametro y es hasta donde van a llegar a sumar.

Leyendo Archivos con IronPython

IronPython es una implementacion del Lenguaje de Programacion Python para correr con el Framework .NET.

Esta implemetado en la cima del Dynamic language Runtime, una libreria que corre sobre la Common Languaje Infrastructure.

Con IronPython podemos escribir codigo Python usando implementaciones del .NET.

Vamos a ver un ejemplo leyendo un archivo con IronPython usando las librerias de .NET.

import clr
import System
from System.IO import *

reader = StreamReader("miarchivo.txt")
read = reader.ReadLine()

while read!="":
    print read
    read = reader.ReadLine()


reader.Close()

Para los que hemos usado C# o quienes hayan usado VB encontraran las funciones muy familiares, asi es como se escribe el lenguaje en python, pero las funciones pertenecen al .NET Framework.

viernes, 4 de enero de 2013

Restando al Area de un Circulo con Python

Algo que suele pasar aveces es que tenemos un circulo, y dentro del circulo queremos poner otro circulo y queremos saber el area del circulo inicial restandole en area del segundo circulo.

Vamos a ilustralo con una imagen :

El area roja es el circulo1 y el area verde es el circulo2 el otro circulo de area naranja su area es el resultado de circulo1 - circulo2.

Vamos a resolver en Python con la amada POO(programacion orientada a objectos).


class Circle:
    def __init__(self,radio):
        self.radio = radio
        self.area = 3.14159*(radio*radio)

    def __sub__(self,circl):
        cir = Circle(self.radio)
        cir.area = self.area - circl.area
        return cir


c1 = Circle(10)
c2 = Circle(3)
c3 = c1-c2

print "circulo1 : {0}".format(c1.area)
print "circulo2 : {0}".format(c2.area)
print "circulo1 - circulo2 : {0}".format(c3.area)


En este caso creamos la case Circle que contiene los datos del circulo, en este caso solo usamos el area, la cual calculamos apartir del radio.

Usamos la funcion __sub__ para modificar el funcionamiento del evento restar, para hacer la simulacion de que estamos restando directamente 2 circulos.

Y el resultado claro esta :


Bastara hacer crecer la clase Circle para hacer mas operaciones con circulos, pero por ahora logramos nuestro cometido...

by Agustin Ramos Escalante
Neopathic

jueves, 3 de enero de 2013

Calculando el numero e con Python

El numero e es el numero por excelencia del calculo, asi como pi es el numero por excelencia de la geometria, el numero e es resultado de una serie(sumatoria) infinita :





Para calcular el numero e use el siguiente codigo en Python :


class Factorial:
    def __init__(self,num):
        self.res = 1
        self.factorial(num)

    def factorial(self,num):
        if num > 0:
            self.res = self.res *num
            return self.factorial(num-1)

    def value(self):
        return self.res

e = 1
for i in range(100):
    e = e + float(1/(Factorial(i+1).value()*(1.0)))
print e

Y como resultado obtuve : 2.71828182846 aproximadamente acercandome al valor del numero e ... pero me faltaron varios numeros ...

by Agustin Ramos Escalante
NeoPathIC

Herramientas para Python #1


Acontinuacion una lista de las librerias que usaremos en Python para hacer tareas especiales en nuestros proyectos de Ciencias :).

Python sera el lenguaje pilar para muchas de las cosas que vamos a hacer aqui, por lo que sera basico tener en cuanta las siguientes librerias.

NumPy y SciPy
Para hacer uso de algebra lineal, Busqueda, etc

MathplotLib
Libreia para Hacer Graficas

pyPDF
Libreria para generar PDFs

Python Image Library
Libreria para crear imagenes desde 0 y tambiem para analisis de Imagenes.

PyGame
Libreria para crear juegos pero la usaremos para crear simulaciones, etc.

IronPython
Python para .NET

Jython
Python para la JVM

PyMunk
Motor de Fisica 2d para Python

Basicamente este es el primer corrido de librerias que usaremos en Python para iniciar...

miércoles, 2 de enero de 2013

Resolviendo la encriptacion Hexadecimal de MATE

Hexadecimal suele ser de las primeras cosas que uno aprende cuando se mete en la informatica, uno aprende binario, octal, hexadecimal ... etc ... con hexadecimal es una buena tecnica de encriptar mensajes y nadie lo sabra amenos de que conozca el valor de las letras en Hexa.

El Siguiente Problema (sencillo) lo propuso MATE :

41 6e 64 20 74 68 65 72 65 27 73 20 6e 6f 20 6f 6e 65 20 65 6c 73 65 0d 0a 54 68 61 74 20 6b 6e 6f 77 73 20 6d 65 0d 0a 4c 69 6b 65 20 79 6f 75 20 64 6f 0d 0a 57 68 61 74 20 49 27 76 65 20 64 6f 6e 65 0d 0a 59 6f 75 27 76 65 20 64 6f 6e 65 20 74 6f 6f 0d 0a 54 68 65 20 77 61 6c 6c 73 20 49 0d 0a 48 69 64 65 20 62 65 68 69 6e 64 0d 0a 59 6f 75 20 77 61 6c 6b 20 74 68 72 6f 75 67 68 0d 0a 59 6f 75 20 6a 75 73 74 20 77 61 6c 6b 20 74 68 72 6f 75 67 68

que podra ser ... Con el siguiente codigo en Python decodifique lo que MATE escribio :


lits_up = 
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'
,'u','v','w','x','y','z']
lits_lo = 
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'
,'u','v','w','x','y','z']

def convert(lit):
    num =0
    if lit=='1': num = 1
    elif lit=='2' : num = 2
    elif lit=='3' : num = 3
    elif lit=='4' : num = 4
    elif lit=='5' : num = 5
    elif lit=='6' : num = 6
    elif lit=='7' : num = 7
    elif lit=='8' : num = 8
    elif lit=='9' : num = 9
    elif lit=='a' : num = 10
    elif lit=='b' : num = 11
    elif lit=='c' : num = 12
    elif lit=='d' : num = 13
    elif lit=='e' : num = 14
    elif lit=='f' : num = 15
    return num

def transform(num):
    lit = ""
    if num >= 65 and num <= 90:
        start = 65
        for up in lits_up:
            if num == start:
                lit = up.upper()
            start = start + 1
    elif num >=97 and num <=122:
        start = 97
        for lo in lits_lo:
            if num==start:
                lit = lo
                break
            start = start + 1
    else : lit = " "

    return lit

#lower 97 - 122
#upper 65 -  90

alldata = "41 6e 64 20 74 68 65 72 65 27 73 20 6e 6f 20 6f 6e 65 20 65 6c 73 65 
0d 0a 54 68 61 74 20 6b 6e 6f 77 73 20 6d 65 0d 0a 4c 69 6b 65 20 79 6f 75 20 64 
6f 0d 0a 57 68 61 74 20 49 27 76 65 20 64 6f 6e 65 0d 0a 59 6f 75 27 76 65 20 64 
6f 6e 65 20 74 6f 6f 0d 0a 54 68 65 20 77 61 6c 6c 73 20 49 0d 0a 48 69 64 65 20 
62 65 68 69 6e 64 0d 0a 59 6f 75 20 77 61 6c 6b 20 74 68 72 6f 75 67 68 0d 0a 59 
6f 75 20 6a 75 73 74 20 77 61 6c 6b 20 74 68 72 6f 75 67 68"

data = alldata.split(" ")
res = ""
for d in data:
    ret = (convert(d[0])*16)+convert(d[1])
    res += transform(ret)

print res

Y he aqui el mensaje que el queria darnos :

And there s no one else  That knows me  Like you do  What I ve done  You ve done too  The walls I  Hide behind  You walk through  You just walk through


NeoPathIC
Agustin Ramos Escalante

Lo que nos espera en el estudio de la Inteligencia Artificial


Voy a empezar a hacer una investigacion y analizacion muy profunda sobre la inteligencia artificial, con el fin de ordenar muy bien el camino que tendre que recorrer.

Las ramas de la inteligencia artificial que estan esperando son :

+ Sistemas Expertos
+ Aprendizaje y Razonamiento Automatico
+ Robotica
+ Procesamiento del Lenguaje Natural
+ Vision Artificial
+ Redes Neurales
+ Logica Difusa
+ Algoritmos Geneticos
+ Vehiculos Autonomos
+ Realidad Virtual
+ Agentes Inteligentes
+ Control de Sistemas
+ Planificacion Automatica

Y pues despues de haber visto que la lista es larga, nos damos cuenta de que aun hay mucho que aprender, pues ni modo, vamos a iniciar nuestro camino.


Let's make it Funny
NeoPathic

Nuevo Libro : Effective Java

Que buena manera de empezar este a~o 2013 que imprimir un libro para enriquecer mas la hermosa teoria, y que mas que el libro Efective Java de Joshua Bloch del cual aprendere muchas cosas, Apenas hoy lo imprimi y lo empezare a estudiar para aprender mas del lenguaje java, tambien me faltaba en mi coleccion de libros impresos uno de Java.

Aqui unas imagenes del libro ... cerrado



Viendo la Portada


Esta es la opcion mas barata y viable de obtener estos libros ... claro :) en Ingles.

Este Libro tiene 369 paginas.

Peter Norving un Ejemplo a seguir



Una buena manera para empezar el año es buscar personajes que sean la hostia. que sean un buen camino a seguir y esta primera vez de este año 2013 me encontre con este personaje Peter Norving del cual me asombre las multiples cosas que hace y me gusto especialmente porque son las cosas que me gustaria hacer ami ... y aquien no :).

Bueno este señor estudio Computer Science, es director de Google Search Quality,  estuvo en  Computational Sciences Division Ahora  Intelligent Systems Division at NASA Ames Research Center, y es autor de varios libros. es Miembre de  Association for the Advancement of Artificial Intelligence.

Sus Libros :

 Artificial Intelligence: A Modern Approach.
 Paradigms of AI Programming: Case Studies in Common Lisp.
 Verbmobil: A Translation System for Face-to-Face Dialog, and Intelligent Help Systems for UNIX.

Un buen Ejemplo...

Hi 2013



Empezamos un nuevo año, el 2013, esta vez con muchas mas ilusiones de crear, innovar,aprender, divertir, etc. Este año llevare a cabo muchos proyectos en varios lenguajes.

Un año mas para llevar a cabo muchos experimentos, hacer ciencia.

Este año me sumergire en mucho Java , Python , C++  y C#, ademas de otros lenguajes PHP,Perl, Ruby, HTML, Javascript, CSS3, JQuery. e Iniciare nuevos lenguajes Lua, Scala... y graficos con OPEN GL.

Los principales proyectos que llevare acabo son de Graficos, Ciencia. Ingenieria,Robotica  e Inteligencia Artificial , intentare divertirme muchos, y divertir a los que me rodean y deseen divertirse conmigo.