sábado, 21 de mayo de 2016

A palos con wxPython

APalosConWxPython

A palos con WxPython

En este artículo voy a relatar una historia que me ha pasado durante esta semana y que al final, después de investigar y leer un montón conseguí solucionar. Esta historia quiere conseguir varias cosas: la primera entretener, la segunda dejar constancia de todo lo que he tenido que pasar para solucionar el problema y que no me vuelva a pasar y la tercera, como no, ayudar a cualquier persona que tenga el mismo problema que yo. Dicho esto, vayamos con la historia.

Sábado 14 de mayo, de madrugada

Serían las dos de la mañana, mi mujer y mis dos peques dormían como angelitos, por alguna razón yo no podía hacerlo, así que aprovechando que la casa estaba inusualmente tranquila (aquellos que tengáis hijos pequeños, sabréis que estas cosas no pasan a menudo y hay que aprovechar je je), decidí bajar al despacho a programar un rato, a ver si así me entraba sueño. Actualmente, en mi tiempo libre, estoy estudiando python, un lenguaje que me ha encantado y que por cierto, estoy preparando artículos para el blog, aunque por desgracia no saco mucho tiempo libre entre la familia y el trabajo y esa es la causa de que apenas pueda actualizar el sitio. Bueno, como decía, me puse a programar en python un juego de tres en raya. Estaba inmerso en la función que pintaría el tablero en la pantalla (el programa es en modo texto) y eso me llevó a pensar que opciones tendría python para hacer programas con GUI (interfaz gráfica de usuario); como me entró curiosidad, guardé el código que llevaba escrito y me fui a Chrome a investigar sobre el asunto. Después de un rato leyendo, encontré varías bibliotecas que permitían crear GUIS, dos de las cuales me llamaron la atención:

  • tkinter
  • wxPython

Hay más, pero a mi esas dos son las que más me llamaron la atención. La primera porque ya viene en la instalación de python por defecto, y eso significa que podía empezar a usarla sin más. Además es multiplataforma, lo que quiere decir que si hago una ventana, sin cambiar código funcionará tanto en Windows como en Linux como en MacOs y la tercera es que el propio creador de python apostó por ella y ahora es una muy decente biblioteca (a partir de la versión 8.5). Desde la propia documentación de python podemos ver la información del módulo tkinter. Lo primero que hice, tal y como explica la documentación fue probar la biblioteca. Abrí una ventana de símbolo de sistema y tecleé: python -m tkinter después de darle a Intro me apareció una ventanita muy maja ella, con dos botones y un texto:
ventana tkinter

Si haces click en el botón que pone "click Me" aparece en el texto del botón unos corchetes, cada vez que hagas click saldrán dos nuevos corchetes. Al darle al botón de EXIT pues se cierra la ventana. Oye, pues no está mal. Vamos a ver que más podemos hacer con tkinter. Investigando un poco más en la documentación pruebo el siguiente código:

import tkinter as gr


class Application(gr.Frame):
    def __init__(self, master=None):
        gr.Frame.__init__(self, master)
        self.pack()
        self.crear_controles()

    def crear_controles(self):
        self.hi_there = gr.Button(self)
        self.hi_there["text"] = "Hola¡ Soy un botón\n(Púlsame)"
        self.hi_there["command"] = self.decir_hola
        self.hi_there.pack(side="top")

        self.QUIT = gr.Button(self, text="Salir", fg="red",
                              command=root.destroy)
        self.QUIT.pack(side="bottom")

    def decir_hola(self):
        print("Hola a todos!")

root = gr.Tk()
app = Application(master=root)
app.mainloop()

una vez escrito, lo probamos y nos sale esto:
Ventana con tkinter

Bueno, lo que hago aquí es simplemente crear una ventana con dos botones, el botón Salir con letras rojas y el otro al pulsarlo, escribe en la consola Hola a todos. La ventana se puede redimensionar, minimizar, cerrar etc. Después de esto, decido dejarlo ahí. Ya tendré tiempo de aprender más sobre tkinter. La verdad es que tenía ganas de probar la biblioteca wxPython, así que busqué en google poniendo wxPython para ver que me encontraba. El primer enlace que me sale es la página oficial de wxPython así que entro y le echo un vistazo. Según la página, wxPython es un envoltorio (wraper) de la biblioteca wxWidget para C++ con el lenguaje Python. Eso quiere decir, que tiene todas las ventajas de wxWidget que es una biblioteca archiconocida para C++ pero que podemos usarla en Python. Genial. Busco a ver como me la puedo descargar para usarla y me llevo la primera sorpresa: resulta que la última versión de la biblioteca es de noviembre de 2014, concretamente la número 3.0.2.0, lo cual me hace pensar: "malo, porque mi versión de python es la 3.5 que salió un año más tarde...". En fin, en la página, a la izquierda hay un menú que pone Download y está desglosado en varios sistemas operativos, así que pincho en Ms Windows y...¡¡JUAS!! resulta que solo vale para python 2.6 y 2.7 (¡¡PERO ESTO QUE ES!!). En serio, ¿con la de años que han pasado ya desde que salió python 3.0 (la primera versión de python 3 es del año 2008) no hay versión de wxPython para ella?. No puede ser, así que me puse a buscar en google. Al cabo de un buen rato encuentro información interesante :D. Hay un proyecto llamado Phoenix que se está encargando de portar wxPython para las nuevas versiones, así que buscando encuentro su dirección: wxPython Phoenix. Aun así, no logro encontrar de donde demonios se descarga la biblioteca. Así que sigo buscando, y al cabo de un rato lo encuentro aquí. Hay librerías para python 2.7, 3.4 y 3.5 ¡genial!. Como sacan actualizaciones nuevas con cierta frecuencia, me voy a la más nueva, y me descargo la de mi versión (en mi caso python 3.5 32 bits para windows). El formato del archivo descargado es whl así que hay que instalarlo con pip. Voy a mi terminal, escribo lo siguiente: pip install "wxPython_Phoenix-3.0.3.dev2025+3e3c3a4-cp35-cp35m-win32.whl" pulso intro y en un momento se me instala el paquete. Ahora hay que probarlo. Abro desde la terminal de comandos el interprete, simplemente escribiendo python y cuando me aparece el prompt>>> escribo import wx pulso intro y... Error wxPython
:O ¡Venga hombre!, un error ahora, ¡Anda ya!. ¿Se habrá instalado mal? lo desinstalo: pip uninstall "wxPython_Phoenix-3.0.3.dev2025+3e3c3a4-cp35-cp35m-win32.whl" intro, y ala, ya está desinstalado. Vamos a instalarlo de nuevo: pip install "wxPython_Phoenix-3.0.3.dev2025+3e3c3a4-cp35-cp35m-win32.whl". Otra vez succesfully completed. Abrimos de nuevo la consola interactiva escribimos import wx y... el mismo error. Ya eran las 4 de la mañana, estaba muy cansado y decidí dejarlo ahí de momento, al día siguiente volvería a tratar de arreglar el problema, porque esto se arregla, ¡Vaya si se arregla!.

Bueno, esta historia es un poco larga, y como primer artículo ya está bien. En poco tiempo, espero continuarla y a ver si en la próxima entrada (depende de como me salga de larga) veremos como lo acabo arreglando ^^.

jueves, 5 de mayo de 2016

Iniciandose en Python

Python, ¿Por qué?.

Hace poco, leyendo por Internet algunos artículos sobre programación, vi uno que me llamó la atención. El artículo, en concreto, hablaba sobre las bondades del lenguaje de programación Python. Yo siempre he programado en otros lenguajes, aunque tenía en mente en un futuro próximo darle una oportunidad a este lenguaje. Así que después de leer ese artículo, me entró curiosidad y entré en la página oficial de Python para descargarme el interprete y empezar a trastear con él.
He de decir que este lenguaje me ha dejado maravillado por diversas razones. Es muy potente pero a la vez simple. La característica principal de Python es ser elegante y sencillo, y lo hace de maravilla. Con Python las cosas difíciles de otros lenguajes se hacen de forma sorprendentemente fácil y siempre hay una manera de hacerlo elegante.

Razones para aprender python

Si eres una persona que no sabe nada de programación, empezar con python es una buena idea. Python tiene una sintaxis muy sencilla y facilita mucho el aprendizaje de los conceptos básicos de programación.
Es un lenguaje que abarca varios tipos de paradigmas de la programación: funcional, orientación a objetos, imperativo… Lo que con un lenguaje de programación como C o Java cuesta hacer, con python es mucho más sencillo y en el peor de los casos sería igual de difícil.
Al ser un lenguaje interpretado, no es necesario conocer el compilador ni el enlazador, que si conviene conocer en otros lenguajes como C/C++.Además se puede utilizar para crear scripts mucho más potentes de los que se pueden hacer con Bash de linux o los archivos por lotes de Windows de cara a realizar tareas complejas con archivos en los sistemas operativos.
Posee infinidad de bibliotecas (llamadas módulos) que te permiten hacer casi cualquier cosa: comprensión de archivos, multi-procesos, aplicaciones gráficas, videojuegos de maneras más fáciles que con otros lenguajes, aplicaciones web, administración de sistemas, cálculo científico… la lista es interminable.
Python además es multiplataforma, el código que se escribe funciona tanto en Windows como linux o mac OsX sin hacer modificaciones o muy pocas.
Muchas de las empresas más famosas usan python para sus aplicaciones: google, yahoo, industrias light and magic, incluso la NASA.

Para que veais, a modo de ejemplo, lo que significa que python es sencillo y elegante vamos a ver como se programaría el típico programa HolaMundo en diversos lenguajes de programación y luego en python.

HolaMundo en C

#include <stdio.h>

int main(){
    print("Hola Mundo");

    return 0;
}

HolaMundo en Java

Public class HolaMundo{
    public static void main(String[] args){
        System.out.println("Hola Mundo");
    }

}

HolaMundo en VB.NET

Module HolaMundo
    Public Sub Main()
        Console.Writeline("Hola Mundo")
    End Sub
End Module

Y ahora lo vamos a ver en Python:

print("Hola mundo")

Como se puede apreciar la sintaxis de python es mucho más fácil y el programa hace lo mismo.

Y ahora después de todo esto ¿qué se necesita para programar en Python?
Lo único que necesitamos son descarganos el interperte de su página web y un editor de código o IDE de nuestra elección. A mi particularmente me gustan mucho Sublime text3 y Visual Studio Code, aunque también se pueden usar otros más sencillos como el block de notas, notepad++, gedit o más pesados como Pydev, un plugin para el IDE de java Esclipse, anaconda… Cada uno que use el editor con el que se sienta más comodo.

Si te ha convencido este texto y quieres aprender python lo primero que tienes que hacer es irte a su página web: python. Allí en la pestaña Downloads veremos que hay dos ramas de python, que son la 2.x y 3.x. Lo suyo es descargarse la versión 3 que ahora mismo es la 3.5.1 ya que es la que está en desarrollo porque la versión 2 se dejó en 2010 y se utiliza por compatibilidad de programas antiguos. Lo cierto es que las mejoras de la versión 3 con respecto a la 2 son bastantes y merece la pena empezar directamente aprender la 3. Tened en cuenta también que el código que funciona el python 3 no funcionará en el 2 y viceversa.
Una vez elegida la versión nos descargamos la que corresponda a nuestro sistema operativo. Si usais Windows, el instalador es muy sencillo, lo único que tenéis que tener en cuenta es marcar la casilla de que añadir python al PATH del sistema y como recomendación instalarlo para todos los usuarios.
Una vez hecho esto, python se instala con un manual de referencia en inglés donde nos explican el lenguaje y sus bibliotecas standars, el interprete de python y una aplicación llamada IDLE que es un pequeño IDE para poder programar en él.
En el próximo artículo, veremos como preparar el editor visual studio code y sublime text 3 para programar en Python.

domingo, 16 de agosto de 2015

HTML, los orígenes

    Todo aquel que quiera dedicarse al desarrollo de páginas web debería aprender a usar el lenguaje HTML. En esta sección que inauguro en el blog iré explicando todo lo relacionado a este lenguaje de marcado. En este primer artículo vamos a ver los orígenes de la red y el porqué se creó el HTML.

Historia breve sobre las redes de ordenadores

    Las primeras ideas sobre la creación de una red de ordenadores para el intercambio de información tuvieron lugar en una agencia de investigación creada por Estados Unidos llamada ARPA (Advanced Research Proyects Agency). La agencia se fundó a finales de los años 50 y su primer director fue el Doctor Licklider. Éste, a mediados de 1962 inició una discusión sobre la interacción entre máquinas y ordenadores y vaticinó la creación de una red gigantesca de ordenadores a la que llamó Galactic Network en la que todos estarían conectados entre sí y podrían intercambiar información. Dos años más tarde, Leonard Kleinrock publicó el primer libro sobre la teoría de la comunicación basada en el intercambio de paquetes (similar al protocolo que usamos hoy en día para la transmisión de la información, el protocolo TCP/IP). Esta teoría se hizo realidad en 1965 gracias a un investigador del MIT, Lawrence G. Roberts, que fue capaz de conectar un ordenador de Massachussets con otro de California y que trabajaran juntos intercambiando información. Este sujeto, se incorporó en el 66 a ARPA para desarrollar el concepto de red informática y fue el origen de ARPANET, nombre original de lo que ahora llamamos Internet. A partir de aquí se inicia la creación de la infraestructura necesaria para desarrollar la red de redes y poco a poco con el paso de los años se van sumando más ordenadores a la red. Todo esto se hace de forma privada, pues hasta 1972 no se crean los protocolos fundamentales y la primera aplicación que usaría esta red: el correo electrónico. Después de ARPANET van surgiendo otras redes, normalmente universitarias o comerciales, una de las mas importantes CSNET,en 1984 se une a la red de ARPANET. A principios de los 80 se establece que el protocolo de transmisión de datos usado en Arpanet sea TCP/IP. Surge también la creación de las DNS, un sistema de directorios, que asignan un nombre único a un pc similar a los números de las guías telefónicas para identificarlo en lugar de la dirección IP, mucho más difícil de recordar. Mas adelante se crea una red pública a la que poco a poco se van sumando países hasta que finalmente ARPANET desaparece tras juntarse con otras redes, dando como resultado la Internet que conocemos hoy.

La WWW

Hasta ahora la única aplicación conocida en Internet era la de correo electrónico, poco a poco se fueron creando otras, como FTP, File Transfer Protocol (protocolo para el intercambio de archivos), NNTP, Network News Transfer Protocol (protocolo de transferencia de noticias), IRC, Internet Relay Chat (para las conversaciones en línea) y aplicaciones de búsqueda de recursos.
En 1991, gracias a un investigador del CERN, Centro Europeo para la investigación de Física de Partículas, llamado Tim Berners-Lee que propuso un sistema para intercambiar documentos a través de enlaces o vínculos surge la WWW.
Su idea se basaba en la inclusión de enlaces en los documentos de texto que al pulsarlos permitían ir a otro documento. Escribió un programa que permitiera el uso de este sistema y su edición y un servidor de documentos Web. Tim denominó al programa que permitía ver y crear documentos Web World Wide Web (WWW), y fue el cimiento de los actuales navegadores web. Al principio este programa solo mostraba texto, sin imágenes ni colores. Con el tiempo a la red de documentos entrelazados se le llamó WWW.

lunes, 3 de agosto de 2015

Fundamentos de programación: Algoritmos

Fundamentos de Programación

Programación

¿Qué es la programación? La definición más simple de esta palabra puede ser escribir un programa que pueda ser ejecutado en un ordenador. Para ello necesitamos escribir un algoritmo en un lenguaje de programación adecuado y traducirlo a un lenguaje que el ordenador pueda entender. Básicamente, un programador es una persona que resuelve problemas por medio de un ordenador o computador. Un ordenador es un aparato electrónico que recibe datos, los procesa y los convierte en información útil.

Algoritmo

Antes dije que programar es escribir un algoritmo en un lenguaje de programación y traducirlo a un lenguaje que el ordenador pueda entender, pero ¿Qué es un algoritmo?
Un algoritmo es un conjunto finito de instrucciones en un orden determinado que detallan, por pasos, como solucionar un problema. Los primeros algoritmos que se recuerdan son los matemáticos y reciben este nombre en honor a un matemático persa llamado Mohammed al-khowârizmî que se hizo famoso obteniendo una gran reputación por el enunciado de las reglas para sumar, restar dividir y multiplicar números decimales. La traducción de su apellido al latín fue algoritmus y de ahí se quedó con algoritmo.
Los algoritmos tienen ciertas características fundamentales que se tienen que cumplir para que estén bien formulados:

  • El algoritmo debe ser preciso indicado cada paso en un orden determinado.
  • El algoritmo debe estar totalmente definido. Da igual cuantas veces se sigan los pasos del algoritmo, siempre se debe obtener el mismo resultado cada vez.
  • El algoritmo debe ser finito, es decir, tiene que poder terminar. Debe contar con un número finito de pasos que hagan que se acabe en algún momento.

Un algoritmo debe describir tres partes:

  • Entrada
  • Proceso
  • Salida

La entrada son los datos con los que parte el algoritmo así como las herramientas necesarias.
El proceso son los pasos que operan con los datos de entrada.
La salida es el resultado de haber procesado los datos.
Como ejemplo podemos crear un algoritmo para averiguar si un número es primo o no.
Un número será primo si solo puede dividirse por el mismo y por uno, es decir, si encontramos que es divisible por cualquier otro número no es primo, por tanto un algoritmo para resolver este problema podría ser el siguiente:

 1.Inicio
 variables: 
 divisor --> variable que representa los divisores del número a comprobar
 numero --> Numero a comprobar si es primo.
 2. divisor = 2.
 3. numero/divisor
 4. Si el resultado numero/divisor es entero, entonces numero no es primo, continuar por el paso 7, de lo contrario continuar el proceso
 5. divisor = divisor + 1
 6. Si divisor es igual a número, entonces numero es primo; en caso contrario ir al paso 3.
 7. Fin

Esto es un ejemplo de algoritmo, una vez que se tiene el algoritmo y se ha comprobado que funciona, entonces se escribe en un lenguaje de programación y se traduce a lenguaje máquina gracias a un compilador o intérprete.

sábado, 1 de agosto de 2015

Me gusta la informática, ¿Por dónde empiezo?

Me gusta la informática, ¿por donde empiezo?

Esta es una pregunta que muchas veces me he hecho a mí mismo desde que prácticamente empecé en este mundillo.

La informática abarca muchísimas cosas, tantas, que querer aprenderlas todas es imposible. Normalmente uno se acaba especializando en algunas pero por norma general los informáticos somos personas muy curiosas que nos encanta aprender y nos gusta investigar. En este artículo voy a contar una serie de caminos que una persona puede tomar para embarcarse en este mundillo y tener las ideas claras de a dónde va y como puede terminar.

Si nos queremos dedicar al mundo del desarrollo podemos elegir dos caminos: Desarrollo de software o desarrollo web.

Si elegimos el desarrollo de software o programación de aplicaciones, algo básico es empezar con los fundamentos de programación. Aquí tenemos que tener en cuenta que existen dos paradigmas muy importantes que tendremos que dominar tarde o temprano: la programación estructurada y la programación orientada a objetos. Yo recomiendo empezar por la programación estructurada ya que luego es más fácil embarcarse en la orientada a objetos.
Hay muchos lenguajes de programación que nos pueden servir para empezar, sin embargo yo recomiendo aprender C. C es un lenguaje que ya tiene muchos años, y aunque han salido posteriormente otros lenguajes más potentes y seguros, no hay nada como el lenguaje C para adquirir lo que yo llamo “mentalidad de programador”. C es un lenguaje muy flexible y potente que nos da la oportunidad de programar tanto a bajo nivel como a alto nivel. A diferencia de otros lenguajes más modernos, C nos permite trabajar con la memoria del computador, por lo que el nivel de exigencia en el uso de este lenguaje es mayor y más difícil, cosa que por otra parte también es más gratificante. Digo esto simplemente porque con otros lenguajes como java o la familia de .net Framework de microsoft, el programador no tiene ningún control sobre la memoria ya que de esto se encarga o la máquina virtual de java o el clr (entorno de ejecución común) del .net framework. También es verdad que eso hace que en las carreras y estudios de formación profesional este tema sea uno de los que más quebraderos de cabeza da a los estudiantes, pero con práctica y estudio no hay de qué preocuparse y no es complicado de dominar. Una vez que se aprenda C y se hayan comprendido bien las bases de la programación estructurada se puede dar el salto a C++ y aprender la orientación a objetos. Todo lo que se sabe de C es aplicable a C++ y por tanto es más fácil programar en C++ sabiendo ya C. Por otro lado, gracias a que la sintaxis del lenguaje es muy parecida, un programador que sepa C\C++ puede aprender con relativa facilidad otros lenguajes como Java o C# e incluso Visual Basic.Net.

Pero la cosa no acaba aquí, a la vez que se aprenden esos lenguajes es buena idea conocer los patrones de diseño, herramientas de modelado de sistemas como el UML, diseño de bases de datos (esto es muy útil cuando en programación queremos utilizar bases de datos en nuestros programas para tener persistencia de datos) y buenas prácticas de codificación como clean code o código limpio.
Como veis para empezar hay muchas cosas que aprender y siempre teniendo en cuenta que un programador a diferencia de otras profesiones nunca termina de estudiar; siempre nacen nuevas formas de hacer las cosas, nuevos frameworks que mejoran cosas que antes era más complicado hacer, etc. Lo que hace que siempre andemos aprendiendo y estudiando.

Si lo tuyo es el desarrollo web, aquí puedes tomar dos caminos distintos: Programador FrontEnd o BackEnd. Dependiendo de uno u otro tendrás que aprender unas tecnologías u otras.
Si lo tuyo es el FrontEnd (Programar del lado del cliente) necesitas aprender html, css y javascript. Dominando esas tres tecnologías puedes dedicarte al diseño web con la garantía de que podrás hacer casi cualquier cosa que necesites o te pidan que hagas. Por otro lado siempre puedes ir a más y aprender otras tecnologías como AJAX, TypeScript, JSP etc.
Si lo tuyo es el BackEnd, es decir, programar del lado del servidor, hay muchas tecnologías disponibles: php, ruby, django, node.js o .net.
Lo suyo es especializarse en alguna y conocer las otras por encima, nunca se sabe cuál nos puede venir bien para hacer alguna cosa.

En próximos artículos, entraremos en materia con el lenguaje C y con html para empezar por los dos caminos del desarrollo.

miércoles, 1 de abril de 2015

Bienvenidos

Bienvenidos a mi blog

Escribir el primer artículo de un blog siempre es difícil. Voy a intentar explicar que es lo que vais a poder encontrar aquí.
He creado este blog principalmente por dos propósitos.

El primero servir de diario para mí mismo. El mundo de la informática y la programación es muy vasto, es muy difícil que una persona sola abarque todo el conocimiento y más teniendo en cuenta que esta profesión cambia y evoluciona constantemente, lo que ahora es nuevo mañana puede ser viejo; por eso voy a utilizar este blog a modo de diario para escribir mis andanzas en el mundo de la informática y la programación, así me servirá para estudiar, aprender y mejorar pues soy de la opinión que la cabeza tiene un alcance de almacenamiento limitado y no hay que aprenderse de memoria todo, para eso tenemos los libros, las hojas, los blogs etc.


El segundo propósito va implícito con el primero, es una consecuencia lógica, todo lo que yo escriba aquí les puede ser útil a otras personas. Aquí encontrareis prácticas, teoría y muchas más cosas sobre programación e informática. Si queréis aprender a programar espero que este blog os sea de mucha ayuda. Si el tiempo me lo permite, iré escribiendo artículos con frecuencia. Si consigo ayudar a alguna persona me daré por satisfecho.


Para finalizar, me gustaría explicar la última palabra del título: frustrado. Lo he puesto porque después de llevar desde los 11 años programando, haber terminado con éxito un grado de formación profesional de Técnico Superior en Desarrollo de Aplicaciones Informáticas e incluso haber pasado por un grado de ingeniería en informática de sistemas (el cual no pude completar por problemas personales), el hecho de no encontrar trabajo de lo mío (a parte de alguna tienda de informática y demás) frustra a cualquiera. Así que ya que no estoy metido en la profesión quiero hacerlo a través de este blog y no desaprovechar todo el conocimiento que he ido adquiriendo a lo largo de estos años.
Related Posts Plugin for WordPress, Blogger...