martes, 25 de octubre de 2011

Bases de Datos – Conceptos Básicos (1)

Como ya todos sabemos la forma de persistir datos suele realizarse por medio de una Base de Datos, la misma puede manejarse por medio de archivos de texto planos o por el uso de algún motor de Bases de Datos relacionales como puede ser MySQL, SQLite, PostgreSQL entre otros.
La ventaja de utilizar un motor de Base de datos es que nos ahorramos la escritura de métodos que controlen la consistencia y la integridad de los datos que vamos guardando dentro de la BD. Para los mas inexpertos que quiera hacer cosas pequeñas haré de ejemplo un programita sencillo que use una Base de Datos en un archivo de texto plano, de todas formas recomiendo ampliamente el uso de algún Motor de los nombrados con anterioridad.

Para el ejemplo de una BD en un archivo de texto abrir la consola interactiva de Python y escribir la siguiente función:

>>> def tomarDatos():
...     print 'Ingrese su nombre:'
...     nombre = raw_input()
...     print 'Ingrese su telefono:'
...     telefono = raw_input()
...     archivo = open("datoTelefonos.txt","a")
...     archivo.write(nombre + "/-/-/" + telefono + "\n")
...     archivo.close()

Si invocamos esta función como se indica a continuación:

>>> tomarDatos()
Ingrese su nombre:
pepito
Ingrese su telefono:
555-5555

Se grabara en el archivo “datoTelefonos.txt” el nombre pepito y su respectivo teléfono. Luego de cuatro corridas la Base de datos quedaría de la siguiente forma.

josema/-/-/444-4444
romina/-/-/333-3333
carlos/-/-/222-2222
pepito/-/-/555-5555

Nota: Cabe aclarar que la cadena “/-/-/” no es mas ni menos que el separador de campos, podemos usar cualquier patrón de caracteres que sepamos que no se van a repetir dentro de las cadenas para separar los campos. Luego parsearlos es sencillo.

Como puede observarse en el ejemplito se usa la línea:

archivo = open("datoTelefonos.txt","a")

Esta línea lo que hace es abrir el archivo “datoTelefonos.txt” con la opción “a” que es de append, esto quiere decir que el puntero del archivo se posiciona al final y ya queda listo para escribir datos al final del mismo.
El “open” con la opción “a” crea el archivo en caso que no exista, y lo abre y se posiciona al final en caso de que si exista. Si la opción fuera “w” el archivo se estaría abriendo con la opción de escribir, en este caso  si el archivo no existe el archivo se crea, y en caso de que si exista, el archivo se crea vació.

Para parsear los datos podemos definir esta funcion:

>>> def leerDatos():
...     print "Leyendo datos\n"
...     archivo = open("datoTelefonos.txt","r")
...     for i in archivo.readlines():
...             linea = str(i).split("/-/-/")
...             print "nombre = " + linea[0]
...             print "telefono = " + linea[1]
...     archivo.close()


La salida de invocar este método es la siguiente:

>>> leerDatos()
Leyendo datos

nombre = josema
telefono = 444-4444

nombre = romina
telefono = 333-3333

nombre = carlos
telefono = 222-2222

nombre = pepito
telefono = 555-5555

Lo que se hace en dicho método es abrir el archivo con la opción “r” READ, que seria como abrirlo como solo lectura. Luego la función “archivo.readlines()” devuelve todas las líneas del archivo en un arreglo o lista. Con el for i in archivo.readlines(): vamos iterando por las líneas una a una. En cada iteración se asigna una línea diferente en la variable “i” hasta que no queden más líneas que asignar.
Por ultimo con el método split, se parsea la línea dividiéndola según un separador pasado por parámetros, en nuestro caso se le pasa el patrón “”, el resultado es una lista, arreglo o vector que contiene todas las porciones de la cadena.

Aquí muestro otro ejemplo así queda mas claro:
>>> cadena = "esta-es-una-muestra_de-como-funciona"
>>> parseoCadena = cadena.split("-")
>>> print parseoCadena
['esta', 'es', 'una', 'muestra_de', 'como', 'funciona']

lunes, 24 de octubre de 2011

Definición de funciones simples (1)

Nuevamente para hacer las pruebas que se detallan a continuación recomiendo por simplicidad utilizar la consola interactiva de Python. Así que abramos una consola de Windows y escribamos python.

Se abrirá algo similar a esto:

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

En caso que no se abra mirar el posteo de este mismo blog cuyo titulo es:

Estructuras de Control (1)


Ahora bien, en dicha consola podemos hacer cosas tales como:

>>> a = "Hola mundo"
>>> print a
Hola mundo

También podemos definir una función que muestre un mensaje por pantalla. Para esto es que usamos la palabra reservada def.

>>> def mostrarMensaje(mensaje):
...     print mensaje
...

Para invocar a esta función lo único que debemos hacer es escribir el nombre de la función y pasarle un parámetro que es en definitiva el mensaje que se mostrara por pantalla.

>>> mostrarMensaje(a)
Hola mundo

También se pueden hacer funciones que devuelvan algún valor como por ejemplo:

>>> def suma(x,y):
...     resultado = x+y
...     return resultado

Para invocar dicha función simplemente la llamamos con dos parámetros numéricos y listo.

>>> a = 5
>>> b = 8
>>> valor = suma(a,b)
>>> print valor
13

Nota: Observar que la variable “a” puede contener tipos de datos diferentes durante una misma ejecución, y esto no genera ningún tipo de problema.

Nota 2: La función suma también se podría ejecutar con dos parámetros que contengan cadenas, ya que el operador para concatenar cadenas es justamente la suma.

>>> a = 'Hola'
>>> b = ' Mundo'
>>> valor = suma(a,b)
>>> print valor
Hola Mundo

Esta es una breve introducción al uso de funciones, más adelante veremos con mayor profundidad el tema.

sábado, 15 de octubre de 2011

Estructuras de Control (1)



Nota 1: A diferencia de otros lenguajes en Python los bloques de código no están delimitados por ningún código de inicialización ni de finalización de bloque.
Por ejemplo en Pascal el begin y el end, en C las llaves {}, etc.
En Python el codigo es sensible a la indentacion, todo lo que este al mismo nivel de indentacion se considera como que pertenece al mismo bloque de código, esto "obliga" de alguna manera a que seamos prolijos a la hora de escribir código y que el código generado sea mas legible.

Nota 2: Para hacer las siguientes pruebas te recomiendo que utilices la consola interactiva de Python que es una de las herramientas que hacen a este lenguaje  realmente especial.. ;)..

Si estas con la consola abierta escribí la palabra python dale un ENTER y veras algo similar a esto:

            Python 2.6 (r26:66721, Oct  2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win32
            Type "help", "copyright", "credits" or "license" for more information.
            >>>

Si no estas en la consola y no tenes ganas de abrir una,
Anda a Inicio à Todos los programas à Python 2.6 à Python (command line), se te va a abrir una consola similar a la de Windows pero que esta lista para aceptar código Python.. :P..
Es una consola que sirve para ejecutar código interactivamente lo cual es de muchísima ayuda cuando queremos testear algún código.

Si no queres utilizar la consola interactiva, crea un archivo .py y escribí el código de ejemplo de cada estructura y ejecútalo como lo mostramos mas arriba. 

Estructura de control - IF

En Python existe una estructura de control condicional como en la mayoría de los lenguajes de programación. Básicamente el "if" lo que hace es ejecutar una u otra porción de código de acuerdo a si la condición se cumple o no se cumple.

El formato basico del "if" es:

            if(<expresion>):
                        print "expresion = True"

El "if" puede o no venir acompañado por un "else".
Observar que luego del paréntesis cerrado del “if” hay dos puntos!!!!

            if(<expresion>):
                        print "expresion = True"
            else:
                        print "expresion = False"

NOTA: En Python los valores Booleanos posibles son True (Verdadero) o False (Falso). Recordar que Python es sensible a minusculas y mayusculas por lo cual True <> true. Algo que es bueno decir es que una expresión no tiene que tener si o si un valor Booleano, cualquier valor diferente de 0 (cero) se considera como True, y el 0 (cero) representa False.

>>> valor = 10
>>> if(valor<10):
...     print "valor Menor a 10"
... else:
...     print "valor Mayor o igual a 10"
...
valor Mayor o igual a 10

jueves, 13 de octubre de 2011

Neobook - Primer ejemplo (Tutorial)

Para completar el ejemplo, veamos como esta conformada la página suma.

La página Suma contiene tres Etiquetas con los textos:
           
            SUMA
            [OP1] + [OP2] =
            [RESULTADO]

Y tres botones con la propiedad Caption seteada como:

            Aceptar
            Siguiente
            Inicio

Además aunque no se vea hay un TEXT-INPUT, en el cual se escribirá el resultado de la operación y que luego se comparara con la respuesta correcta para saber que mensaje se mostrara al estudiante.

  
En NeoBook las variables se expresan por medio del nombre de la variable encerrada entre corchetes.

[Nombre de la variable]

Para setearle un valor se usa la siguiente sentencia:

            setVar "resultado" "ERROR!!!... L"

NOTA: NeoBook no es case-sensitive, esto quiere decir que no diferencia entre mayúsculas y minúsculas ni en los nombres de las variables, ni en las palabras reservadas utilizadas para los nombres de las acciones.

Básicamente lo que se debe hacer en esta pagina, es asignarle dos valores aleatorios a las variables [OP1] y [OP2], y luego fijarse si el resultado ingresado por el estudiante en el TEXT-INPUT es correcto o incorrecto.

Para asignar un número aleatorio entre 0 y 99 en las variables [OP1] y [OP2], lo que debemos hacer es ir al menú Page, a la opción Page Properties y en las acciones de la Página escribir:

Random "99" "[op1]"
Random "99" "[op2]"

 Como se muestra en la siguiente imagen:


Se pueden configurar acciones diferentes que se ejecuten cuando se entra a la página, así como también cuando se sale de la misma. Esto se hace escribiendo las acciones deseadas en las pestañas Page Enter y Page Exit.
Cuando ingresemos a la pagina suma se mostrara algo similar a esto!..



El TEXT-INPUT se debe configurar como se muestra en la siguiente imagen.
En el campo Variable (to store Text Entry contents), ponemos [Result1], de esta manera le indicamos a NeoBook que almacene el contenido del TEXT-INPUT dentro de la variable [Result1] ya que dicho valor será el que usaremos para determinar si lo ingresado por el usuario es correcto o no.


Una vez que el estudiante ingrese el resultado en el TEXT-INPUT, deberá hacer un click en el botón Aceptar, para que se le informe si la respuesta fue correcta o no.
Para esto lo que se debe hacer es configurar las acciones del boton como se mostro la primera publicación y escribir lo siguiente:

Math "[op1] + [op2]" "0" "[result2]"
if "[result2]" "=" "[result1]"
    setvar "Resultado" "Excelente!!!!  :)"
else
    setvar "Resultado" "Error!!!.. :("
endif


Explicare un poco estas acciones:

La acción Math recibe tres parámetros:
            1ro: La expresión matemática, en este caso es la suma del operando1 mas el operando 2.
            2do: La cantidad de decimales que queremos que tenga el resultado, si ponemos 0, se redondeara el valor hacia arriba o hacia abajo dependiendo el valor del decimal.
            3ro: La variable en la cual queremos que se almacene el resultado de la expresión matemática

El bloque de control if es un bloque condicional. En lenguaje natural se leeria de la siguiente forma:

     Si "condicion"
         Sentencias
     Sino
         Otras sentencias
     Fin si

Si la condición expuesta se cumple, entonces se ejecuta el bloque expresado dentro del SI, si la condición no se cumple se ejecutara el bloque que se encuentra dentro del sino, para cerrar el bloque condicional, se usa la palabra reservada endif.
En el ejemplo planteado se dice que si el resultado almacenado en la variable result2 (resultado correcto), es igual al resultado almacenada en la variable result1, se mostrara el mensaje Excelente!!!!   J, sino se mostrara el mensaje Error!!!.. :(.




 
La acción del botón siguiente será, plantear un nuevo ejercicio y blanquear el mensaje que aparece en la variable resultado.
Las sentencias que se deben usar para dicho fin son las siguientes.

Random "99" "[op1]"
Random "99" "[op2]"

setvar "resultado" ""
setvar "result1" ""

Nuevamente con Random se asigna un valor aleatorio a los operandos 1 y 2, y con setvar "resultado" "" se blanquea el valor del mensaje de resultado.

Solo quedaría como ejercicio completar el resto de las páginas, Resta, Multiplicación y División, pero con esta base no debería ser mas que con Copy/Paste y cambiar la operación de la acción Math.

Aca puede descargar el ejecutable y el archivo .pub completo.

Descargar ejemplo

Gracias por leer el articulo!.

miércoles, 12 de octubre de 2011

Neobook - Primer ejemplo (Tutorial)

Neobook es una herramienta no tan difundida como a mi parecer debiera, muy útil para el diseño de aplicaciones multimedia.
Un uso que se le puede dar a Neobook es introducir a programadores novatos en el mundo de la programación Visual, así como también capacitar a docentes de cualquier área en el desarrollo de sus propias herramientas de enseñanza.

Neobook tiene la particularidad que hace que realizar aplicaciones graficas sea muy sencillo e intuitivo.

Puedo presentar un simple ejemplo:

Podemos hacer una aplicación que presente problemas matemáticos de suma, resta, multiplicación y división de números de dos cifras.

Primero seria bueno mostrarles la barra de herramientas y ponerle un nombre unico a cada una de las posibles opciones asi hablamos el mismo idioma.. ;)

BARRA DE HERRAMIENTAS



Para comenzar ahora si a trabajar en el primer proyecto, lo que habria que hacer seria crear cinco paginas.
Para crear una nueva pagina lo que hay que hacer es ir al menú que se llama “Page” y seleccionar la opción “Add Page…” luego simplemente escribir el nombre de la pagina y listo. Para renombrar la pagina principal simplemente nos posicionamos en la pagina principal y vamos al menú “Page” y seleccionamos la opción “Rename Page…”





A continuación de crear todas las paginas y nombrarlas de siguiente manera:
            Principal
            Suma
            Resta
            Multiplicacion
            Division

Nos posicionamos en la página Principal y le ponemos un fondo negro.
Para cambiar el color de fondo de una pagina en particular debemos ir al menú Page y seleccionar la opción Page Properties. 


En Page Background – Solid Color: elegimos el color negro.

Seguidamente ponemos una etiqueta con el texto Cálculos Matemáticos.

Además de dicha etiqueta agregamos cuatro botones cuyos textos sean Suma, Resta, Multiplicación, División, como se muestra en la siguiente imagen.


 
Para asignarles una acción a los botones lo que hay que hacer es dar un click derecho sobre el botón y se nos abrirá la ventana para setear las propiedades del botón.

 
En las propiedades generales (General), podemos modificar el texto que se mostrara en el botón, mediante la propiedad Caption. En este caso queremos que se muestre la palabra Suma. También se puede elegir alguna tecla de acceso rápido como por ejemplo CTRL + S para ir a las sumas. Y seleccionar el estado inicial del botón, si el mismo se encuentra visible y si esta habilitado o deshabilitado.
Para configurar la acción que queremos que se ejecute al hacer click sobre el botón, vamos a la opción Actions y se abrirá la siguiente ventana.

 
Ahí tenemos para escribir las acciones que queremos que se ejecuten al hacer click izquierdo sobre el botón, al hacer click derecho, al hacer que el Mouse se posicione sobre el botón, y al hacer que el Mouse deje de posicionarse sobre el botón, mediante las pestañas inferiores llamadas “Left Click”, “Right Click”, “Mouse Enter”, “Mouse Exit”.  Para que cuando se haga click en el boton suma, el programa vaya a la pagina Suma, la accion que debe escribirse es GotoPage "suma".

Que empiece la accion

Una vez que tenemos instalado Python en nuestra computadora, ya podemos comenzar a divertirnos.
Como en todo lenguaje de programación que recién comenzamos a utilizar lo primero y principal es aprender a mostrar por pantalla la frase "Hola Mundo!!!". :)..
En Python esto es tan simple como crear un archivo que se llame "holaMundo.py" y dentro de el escribir:

print "Hola Mundo!!!"

Luego ir a una consola de Windows.

Para los más novatos esto puede hacerse yendo a Inicio - Ejecutar y escribir la palabra cmd. Luego nos posicionamos en la carpeta en la que se encuentra el archivo “holaMundo.py" y escribimos en la consola:

!>python holaMundo.py

Nota: En caso de que te diga que python no es un comando valido, lo que tenes que hacer es modificar las variables de entorno de Windows, particularmente la variable PATH.
Si no sabes como hacer esto lee esto:

Modificar variables de entorno de Windows

Una vez que modificaste la variable de Entorno tenes que cerrar la consola y volver a abrirla.
Ahora si ejecutas en la carpeta en donde tenes el "holaMundo.py", el comando

!>python holaMundo.py
Hola Mundo!!!

Te va a mostrar correctamente el mensaje.. :D

Aprendiendo Python

La idea de este post es fomentar un poco más el uso de un lenguaje de propósito general cada vez mas utilizado a nivel mundial. Este lenguaje se llama Python y tiene varias características que lo hacen un lenguaje poderosísimo que no tiene nada que envidiarle a ninguno de los monstruos del marketing como puede ser Java o .NET, los cuales tienen grandes empresas detrás.
A diferencia de estos últimos lenguajes PYTHON se ha hecho fuerte a partir del aporte muchas veces desinteresado de una comunidad que fomenta y alienta el Software Libre.
Con mi poca experiencia en Python, hace solo 2 años que programo con él, puedo decirles que es un lenguaje de muy fácil aprendizaje, con una potencia y robustez realmente admirable y como dije previamente una comunidad de gente comprometida y dispuesta a enseñar muchos trucos que resultan de gran ayuda cuando nos quedamos estancados por alguna razón.
Una aclaración que me parece importante hacer es que si bien Python es multi-plataforma, es decir que lo que programemos en Python (Si respetamos buenas técnicas de programación), debería poder correr tanto en un entorno Windows como Linux, yo trabajo fundamentalmente en un Entorno Windows por lo cual lo que explicare de ahora en adelante en mi BLOG va a ser casi siempre en dicho ambiente, de todas formas les puedo asegurar que no difiere mucho lo que hay que hacer en las distribuciones mas modernas de Linux.. ;)

(LO OBVIO ES INVISIBLE A LOS OJOS)

Lo primero que yo recomendaría para comenzar a programar con Python seria justamente que instalen Python... :)..
Yo estoy utilizando actualmente la versión 2.6, así que voy a poner el link de descarga de esa versión, sin embargo si quieren instalarse una versión mas actual solo deben "GOOGLEAR" unos segundos y ya les aparecerá de donde descargarla.. ;)

(INSTALACION NO EXLUYENTE)

Si su objetivo es hacer programas con interfaz grafica Stand-Alone (Es decir no WEB) les recomiendo también que descarguen PyQT, como para ir ganando tiempo..

(OTROS APLICATIVOS)

Para programar con Python no hace falta más que contar con un "bloc de notas" común y silvestre, de todas formas por comodidad es recomendable descargar alguno que sea un poco más potente y que como mínimo nos coloree las líneas de código, indicándonos cuales son palabras claves o reservadas. Yo suelo utilizar el notepad++ que puede descargarse de aquí.


Si bien con un Bloc de notas común o uno un poco mas sofisticado ya les alcanza para comenzar a escribir programas, lo que les solucionaría bastantes problemas, sería que utilizaran un IDE (Entorno de desarrollo Integrado) que cuenta con muchas ventajas.
Por ejemplo:
  • Autocompleta código,
  • Permite formateo automático,
  • Colorea palabras reservadas y palabras claves,
  • En caso de que estemos cometiendo un error en la escritura de código, como puede ser utilizar una variable que no esta declarada o ese tipo de cosas, el mismo IDE nos pondrá una marca en la línea en la que se esta cometiendo el error.
Yo para programar con Python suelo utilizar un IDE bastante difundido llamado Eclipse, al cual se le debe instalar un plugin denominado "PyDev" para que el entorno sepa que vamos a utilizar Python para programar.. ;)

Descargar Eclipse