Archivo Categorías : Programación


an introduction to interactive programming in Python 9

El pasado mes de Octubre comencé el curso An Introduction to Interactive Programming in Python que la Universidad de Rice ofrece a través de Coursera. El curso es una introducción a Python basada en el desarrollo de juegos sencillos. De las 9 semanas que dura el curso conseguí llegar hasta la semana 7, y tuve que abandonar en ese punto el curso por falta de tiempo.

Como valoración global el curso me ha encantado. No soy un novato programando, pero mis conocimientos de Python eran muy superficiales. Con este curso los he mejorado, y sobre todo me he divertido. Hacía años que no disfrutaba tanto con un curso de programación, y esto ha sido posible gracias al enfoque del curso, que consiste en módulos semanales donde se explica lo necesario para que el alumno pueda realizar un pequeño proyecto de programación. De esta manera se consigue una alta motivación pues el alumno va viendo sus progresos semanalmente. Los proyectos son programas de dificultad baja o media, que se pueden completar con menos de 200 lineas de código, y que están detallados con procedimientos paso a paso que minimizan las dificultades de realización de los mismos. El único inconveniente es el idioma, a veces me costó entender qué tenía que hacer pero más por dificultades con el inglés que por la complejidad de la tarea a realizar.

Para el desarrollo del curso se utiliza la herramienta CodeSkulptor, que es un intérprete Python que se ejecuta en una ventana de navegador web, con lo que el alumno no tiene que instalar nada en su PC para seguir el curso. Además se utiliza un modulo llamado SimpleGUI que se ejecuta internamente en CodeSkulptor y que ofrece la posibilidad de realizar aplicaciones interactivas de manera sencilla. Este módulo es sencillo pero las posibilidades que ofrece para desarrollar aplicaciones gráficas sencillas son enormes.

Como dije antes, el curso está organizado por bloques semanales, cada uno con una serie de videos explicativos, ejercicios y un miniproyecto que se debe entregar puntualmente. El contenido de las 7 primeras semanas del curso fue el siguiente:

  1. Comentarios, literales, expresiones aritméticas, operadores, variables. Miniproyecto: ‘Queremos un shrubbery!’
  2. Funciones, indentación, expresiones aritméticas, módulos, expresiones y operadores lógicos, instrucciones condicionales. Miniproyecto: ‘Piedra, papel, tijera, lagarto, spock’.
  3. Programación dirigida por eventos, variables locales y globales, SimpleGUI, botones, campos de entrada. Miniproyecto: ‘Adivina el número’.
  4. Canvas y dibujo, operaciones con cadenas, dibujo de texto, timers. Miniproyecto: ‘Parar el cronómetro’.
  5. Listas, puntos y vectores, distancias, colisiones y reflexiones, eventos de teclado, control de posición, control de velocidad, datos mutables e inmutables. Miniproyecto: ‘Pong’.
  6. Eventos de ratón, métodos de listas, iteración, diccionarios, carga y dibujo de imágenes. Miniproyecto: ‘Memory’.
  7. Objetos y clases, trabajar con objetos, imágenes troceadas. Miniproyecto: ‘Blackjack’.

De las dos últimas semanas, lo único que se es que el juego a desarrollar era una versión simplificada del juego clásico de asteroides, y me dio mucha pena abandonar el curso en ese punto.

Para poder hacer los proyectos en mi PC sin tener que usar CodeSkulptor me instalé, aparte del intérprete de Python, las librerías PyGame y SimpleGUICS2PyGame. Esta última es una implementación de la versión de SimpleGUI que usa CodeSkulptor en local. Algunos de los programas que he realizado son los siguientes:

  • Parar el cronómetro, hecho con 83 lineas de código.
  • stopwatch

  • Pong, hecho con 138 lineas de código.
  • pong

  • Memory, hecho con 82 lineas de código.
  • memory

  • Blackjack, hecho con 220 lineas de código.
  • blackjack

Mi recomendación del curso es total, tanto para programadores que quieran comenzar con Python como para novatos en la disciplina. El curso está muy bien desarrollado, mantiene la motivación del alumno y permite aprender los fundamentos del lenguaje de una manera muy divertida. El curso te deja con ganas de aprender más sobre Python y de usar lo aprendido para hacerte tus propios programas, como este ahorcado que he hecho con 78 lineas de código. Python es un lenguaje impresionante.

ahorcado


nuevas web

En las últimas semanas he estado preparando dos sitios web. Uno es para la peluquería de mi esposa, http://www.azabachenovelda.com, y el otro para el AMPA del Conservatorio de Danza de Novelda, http://www.dansa.es.

2013-11-27_180015

Los dos sitios web están hechos con WordPress y los dos usan el tema twenty thirteen, que me parece realmente estupendo. El motivo para elegir este tema para los dos sitios es debido a que soporta diseño adaptativo, y esto es muy importante hoy en día. Esto lo aprendí después de traducir y personalizar un tema gratuito con multiples características como portada deslizante, portfolio, etc. y tras probar la web con un smartphone el resultado fue un fiasco total. Más vale fácil y sencillo que rebuscado y complejo.

Para la web dansa.es estoy utilizando el plugin JetPack de WordPress que proporciona entre otras cosas estadísticas para la web, suscripción a post via emial y otras funcionalidades.


exportando datos a excel

Uno de los pequeños detalles que me faltaban en la actualización de Findemes en la que estoy trabajando era el tema de la exportación de datos a Excel. Es muy útil que cualquier programa permita la exportación de datos para que se puedan tratar en una hoja de cálculo, pero en el caso de un programa de contabilidad personal este aspecto toma mayor relevancia.

2013-04-23_160200

La manera más sencilla de exportar los datos de un xbrowse de FWH a Excel es usar el método toExcel() de la clase, sin embargo esta manera de realizar la exportación presenta algunos problemas. El primero es que la exportación se hace a través del propio Excel, o sea que el usuario tiene que tener Excel instalado, supuesto que no siempre se cumple. El segundo es no he conseguido que la exportación de datos numéricos se realice correctamente. Al pasar un número con formato 999.999,99 a Excel se transforma en 999999.99 con lo cual no se puede operar correctamente con él en la versión en español del programa. El porqué de este cambio escapa a mis conocimientos, pero creo que es debido a los cambios de formato que se utilizan internamente en la clase para la exportación.

2013-04-23_160142

Ante estos problemas recordé haber leído un post en el foro de FWH donde Rafa TheFull había publicado una manera diferente de realizar la exportación. En el post Rafa, que se puede leer en http://forums.fivetechsupport.com/viewtopic.php?f=6&t=19897, habla de los problemas para generar el fichero XLS a través del propio Excel y que no existe la seguridad de que esta manera de realizar la exportación funcione en todas las instalaciones. Ante esto, Rafa propone utilizar la clase XlsFile de Ramón Avendaño, un programador que en su día realizó muchas contribuciones a FWH. El método usado por esta clase consiste en crear un fichero desde cero, escribiendo todos los caracteres necesarios para crear un fichero en formato XLS puro, sin pasar por Excel. El fichero generado se puede abrir con Excel o LibreOffice.

2013-04-23_160417

Al comenzar a utilizar la función de Rafa, me encontré con el problema de la exportación de las columnas en que se muestra una imagen. La manera que he encontrado de de solucionarlo es usar la variable cargo que existe en todas las clases para asignar el valor que se va a mostrar en la exportación y luego comprobar que cuando el tipo de la columna sea de tipo definido por el usuario mostrar la variable cargo. Algo así:

elseif Valtype( cText ) == "U"
@ nFila, nCol XLS SAY oBrw:aCols[x]:Cargo OF oXls

Con esto consigo una exportación más completa que usando el método de la clase, que se realiza independientemente de los programas que tenga instalado el usuario y que se puede abrir con varios editores de hojas de cálculo.


colores en xbrowse

En la actualización de Findemes que estoy preparando he cambiado el aspecto del programa para dotarlo del look de Windows 7 y uno de los cambios introducidos es poner el pintado de las rejillas de datos con el degradado de Windows 7. Como en Findemes las lineas de apunte se pintan de distinto color en función de si son ingresos o gastos para hacer el pintado correctamente hay que modificar el método oBrw:bClrStd de la siguiente manera:


oApp():oGrid:bClrStd := {|| { iif( AP->ApTipo == "I", oApp():cClrIng, oApp():cClrGas ), CLR_WHITE } }

El resultado es el siguiente:

fdm_browse1

Sin embargo hay un problema: el pintado de los colores de ingreso y gasto es correcto en todas las lineas excepto en la linea seleccionada. En esta linea el texto sigue apareciendo en el color por defecto de browse que es el negro. Para que el efecto sea completo hay que modificar el método oBrw:bClrSelFocus de la siguiente manera:


oApp():oGrid:bClrSelFocus := { || { iif( AP->ApTipo == "I", oApp():cClrIng, oApp():cClrGas ),;
{ { 1, RGB( 220, 235, 252 ), RGB( 193, 219, 252 ) } } } }

Ahora el pintado ya es el deseado.

fdm_browse2


curso de programación de aplicaciones en android

Me he inscrito en el curso android: programación de aplicaciones que está realizando el sitio web Miríada X. Este sitio web pertenece a la red universidades de Universia y ofrece cursos online masivos en abierto, o MOOC en sus siglas en inglés. El curso lo imparte un profesor de la Universidad Politécnica de Valencia, que fue precisamente donde cursé ya hace muchos años mis estudios universitarios en Informática. Va a ser mi primera experiencia en un MOOC, y cuando lo termine contaré qué tal me ha parecido.

Mi interés hacía la plataforma Android ha subido mucho desde las pasadas Navidades. Uno de los regalos en casa fue una tableta Android, y poco a poco ha pasado de ser un juguete a ir sustituyendo a los ordenadores de casa para tareas como navegar, leer el correo electrónico, juegos y alguna más. El punto débil de la tableta, desde mi punto de vista, es la dificultad para utilizarla en cosas que requieran escritura. Escribir en una tableta no es fácil, no tienes el tacto de un teclado físico y el trabajo no se realiza con la misma rápidez y facilidad que con un ordenador con teclado físico.

Con este curso espero adquirir los conocimientos básicos de programación de esta plataforma. Que el lenguaje usado sea Java es algo que no me gusta mucho, pero el entorno ‘oficial’ de desarrollo para Android – el Android SDK – está construido alrededor de este lenguaje. Mi relación con el lenguaje Java nunca ha sido buena, nunca me he sentido cómodo programando con él. Espero que esta vez sea diferente.


harbour/fivewin support to sublime text 2

Further my previous post on the Harbour support for Sublime Text 2, a group of enthusiasts led by Rafa Carmona – also known as ‘thefull’ – and Quim Ferrer are developing a more completed package to support Harbour language on Sublime Text 2. This package is hosted on Github in the following URL: https://github.com/rafathefull/harbour The only thing you have to do is download the package and copy the files included in a folder named Harbour in the package folder of ST2. We have also created a discussion group at Google Groups to talk about anything involved on the development of the package. You can read and join us at Harbour / Sublime Text 2

In adition to this, Quim Ferrer is developing the Fivewin support for ST2. You can donwload this package in the following URL https://github.com/QuimFerrer/fivewin This package requires the Harbour package to run.

FivewinST2


sublime text 2 3

No cabe duda de que Sublime Text 2 – ST2 – es uno de los editores de código de moda y que no deja indiferente a ningún programador. Al principio resulta un tanto desolador la ausencia de botones o barras de herramientas, pero poco a poco lo vas agradeciendo pues te permite concentrarte en el código evitando toda distracción estética.

Yo comencé a probarlo pues quería un editor para usar en Mac y ST2 es de los pocos editores multiplataforma -Windows/Mac/Linux – que encontré. Además es facilmente extensible con infinidad de plugins y temas, tiene una versatilidad dificilmente alcanzable y es bastante ligero en comparación con otros editores. Su último argumento a favor es que la edición de prueba no caduca, con lo cual puedes ir probandolo sin prisa hasta que caes rendido a sus pies. Si no lo has probado todavía lo mejor es que lo descargues y que leas estos enlaces para conocerlo un poco mejor:

¿ Qué le falta a ST2 para ser el editor preferido de los viejos clipperos ? Pues unicamente el coloreado del lenguaje. Cómo no he encontrado ninguno pues comencé a hacerlo yo, está unicamente empezado pero puede ser el germen de un fichero de sintaxis completo. Hasta ahora tengo hecho lo siguiente:

  • Reconocimiento de números, cadenas de caractéres entrecomilladas y comentarios de una linea.
  • Reconocimiento de las siguientes sentencias de control: do, case, endcase, otherwise, switch, if, else, endif, while, end, enddo, exit, function, return, for, next.
  • Reconocimiento de las siguientes declaraciones: local, default, field, static, public, static, external, REQUEST.
  • Un par de snippets sencillos: el de la sentencia if..endif y la sentencia if..else..endif

El resultado es un coloreado como el que se aprecia en la imagen:

st2-clipper

Para la creación de la sintaxis del lenguaje me fue muy útil el contenido del siguiente enlace: Creando un tmLanguage para Sublime (syntax definition), y para la creación de snippets este otro Sublime Text 2 Snippets

En el siguiente enlace dejo un fichero con la sintaxis de clipper para ST2 que contiene lo siguiente:

  • clipper.json-tmlanguage que contiene la definición editable de la sintaxis de Clipper
  • clipper.tmlanguage, que contiene el fichero compilado con la definición de sintaxis para clipper
  • if.sublime-snippet el snippet de la sentencia if..endif y if-else.sublime-snippet que contiene el snippet de la sentencia if..else..endif

Estos 4 ficheros se deben descomprimir en la carpeta de definiciones de usuario de ST2, aunque el primer fichero sólo será necesario en caso de querer modificar la sintaxis del lenguaje. En Windows 7 la carpeta es C:\Usuarios\{username}\AppData\Roaming\Sublime Text 2\Packages\User. Una vez hecho esto se abre un .prg, se elige la sintaxis de Clipper haciendo click en la lista de lenguages y ya está.

Sintaxis de Clipper para SublimeText2

En esta primera versión de la sintaxis faltan muchas cosas. Si alguien está interesado en ayudarme con el proyecto, puede escribirme a joseluis@alanit.com o poner un comentario en este post. Mi intención es completar el fichero de sintaxis, subirlo a GitHub y darlo de alta en relación de paquetes de ST2.


dos regalos

En las últimas semanas he recibido dos grandes regalos.

Primero fue Jaime, que me regalo el libro ‘Seductive interaction design‘. Según palabras de Jaime es ‘el mejor libro de diseño de interacción que he leido nunca’. Este verano voy a aplicarme leyéndolo, con lo que intento conseguir dos cosas: aprender sobre diseño de interacción y mejorar mi nivel de inglés. Uno de los primeros capítulos hablar del poder del diseño de interacción para hacer cosas divertidas que cambien la percepción de la gente sobre algo. De muestra este video:

El segundo regalo ha sido una actualización de FivewinHarbour a raiz de este post en los foros de Fivetech. Esta actualicación me ha permitido probar la cinta de opciones y he decidido incorporarla a Cuaderno de Bitácora. En la nueva versión del programa habrá una pestaña de la cinta para cada una de las colecciones, lo que permitirá hacer visibles funcionalidades del programa que hasta ahora quedaban un tanto ocultas, como todos los ficheros de tablas auxiliares. En la nueva versión estos ficheros serán accesibles desde la pestaña de la cinta de la colección y el programa permitirá hacer consultas maestro-detalle desde cada uno de estos ficheros. Con esto y algunas nuevas funcionalidades creo que el programa da un paso al frente en cuanto a potencia y facilidad de uso.


listas de correo con WP Autoresponder

En la web de alanit he incorporado la funcionalidad de listas de correo a través de un plugin para WordPress llamado WP Autoresponder. Este plugin permite implementar de una manera relativamente sencilla la creación y gestión de listas de correo, suscriptores, respuestas automáticas, suscripción a contenido de un blog y todo lo necesario para realizar campañas de marketing por e-mail desde un sitio web hecho con WordPress.

A raiz de la creación de la lista de correo, he tenido la necesidad de crear páginas en la web que permanezcan ocultas, es decir que no aparezcan en el menú de la web sino que se llegue a ellas mediante enlaces directos. Para ello he usado el plugin PC Hide Pages que muestra las páginas del sitio web hecho con WordPress y permite seleccionar las que queramos para ocultarlas. De esta manera no aparecen en el menú del sitio web pero las páginas son accesibles conociendo su URL.


f.lux

f.lux es una utilidad gratuita que se encarga de regular la tonalidad del monitor del ordenador en función de la hora del día o de la noche en que lo estemos utilizando. Cuando se hace de noche va bajando la luminosidad del monitor y usando tonos más cálidos, mientras que en las horas centrales del día muestra el color en toda su liminosidad.

Hay bastantes estudios que indican que el uso de un ordenador por la noche puede producir alteraciones del sueño, pues el uso del ordenador, o de una tableta, antes de acostarse activa los mecanismos sensoriales del cerebro y hacen que conciliar el sueño sea más difícil. En el sitio web de f.lux hay una página dedicada a estudios del sueño que dicen que la luz azul parece ser la causa de algunos trastornos del sueño. El programa lo que hace es modificar precisamente esa luz azul que emite el ordenador para atenuar sus efectos sobre el mecanismo del sueño.

El programa permite indicar la ubicación donde estás para adaptar el control de la tonalidad a las horas de sol de ese sitio, y también permite deshabilitar su efecto durante una hora, permitiendo hacer cosas en que la tonalidad de colores deba ser la correcta. A mi ya me ha pasado que he tomado una captura de pantalla y la he tenido que repetir previa deshabilitación del programa.

En mi opinión es un programa muy útil, sobre todo si trabajas por la noche. Además tiene un efecto añadido: al ver como va cambiando la tonalidad de la pantalla te va recordando que es hora de ir a dormir.