viernes, 30 de marzo de 2012

Icono y propiedades del programa

Todo programa que se precie debe tener un icono identificativo, y proclamar con orgullo el nombre de su creador.

El primer paso ha sido preparar un icono para nela. He tomado el excelente icono que hizo Nuno Pinheiro para Akregator, y lo he destrozado un poco mediante mis pésimas habilidades con Inkscape.

Tras exportar el diseño vectorial a varios PNG en distintos tamaños, los he agrupado en un fichero en formato .ico de MS Windows. Para que el ejecutable ostente este icono, hay que crear un fichero de recursos (Resource Compiler, .rc), que contenga una línea como ésta:
IDI_ICON1             ICON          DISCARDABLE    "nela.ico"

Por último, se incluye este script en el fichero de proyecto añadiendo la línea
win32:RC_FILE = nela.rc

En esta captura de pantalla podéis ver el resultado final:



En Mac OS X los iconos van en formato ICNS, y se incluyen en el fichero del proyecto con
mac {
    ICON = nela.icns
}

En Unix se puede utilizar el formato PNG sin más, pero habrá que colocarlos en el sitio adecuado (por ejemplo /usr/share/icons) al instalar. En la página web de Qt se pueden obtener más detalles de cómo establecer el icono de la aplicación.

Volviendo a Windows, podemos aprovechar el script de definición de recursos para incluir información sobre nuestro programa (descripción, versión, empresa...). Esta información se ve en la solapa «Detalles» de las propiedades del ejecutable, o simplemente al pasar el ratón por encima. En esta página se puede encontrar información sobre los distintos campos de VERSIONINFO.

Esto es lo que vemos en la versión 0.0.3 de nela:



Por último, la Oficina de Software Libre de la Universidad de Zaragoza ha tenido la amabilidad de realizarme una pequeña entrevista sobre este proyecto.

martes, 27 de marzo de 2012

Disponible el primer prototipo

Tradicionalmente, la metodología de desarrollo de software ha sido el modelo en cascada:
El desarrollo se encuentra dividido en fases claramente determinadas, y no se pasa a una fase hasta haber finalizado con la anterior.  Muy bonito en teoría, pero nada realista en la práctica.

En el mundo del Software Libre, el proceso de desarrollo de software es muy diferente, tendiéndose a usar metodologías iterativas para el desarrollo rápido de aplicaciones (RAD) en cualquiera de sus variantes, destacando quizás los métodos ágiles como la programación extrema, y Scrum como sistema de gestión de proyectos.


TL;DR se puede resumir en el lema publica pronto, publica con frecuencia, escucha a tus usuarios.

El desarrollo se lleva a cabo como una serie de miniproyectos denominados iteraciones. Cada iteración tiene sus actividades de análisis de requisitos, diseño, implementación y pruebas, y el resultado de cada una es un sistema incompleto, pero ejecutable y probado. No son prototipos experimentales a descartar, sino un subconjunto del sistema final, con calidad de producción.

Así pues, se empieza por las funcionalidades de mayor riesgo y mayor importancia para el usuario. Con el feedback de éste, se va estabilizando la arquitectura y añadiendo nuevas características.

Siguiendo esta filosofía, tengo el placer de anunciar la versión 0.0.1 de nela. Obviamente hace poca cosa, pero como comienzo ya es interesante. Es capaz de reconocer las teclas pulsadas en la máquina Perkins virtual (teclas SDF JKL). Funciona tanto en MS Windows como en GNU/Linux, en inglés y en castellano (detecta el idioma del sistema).

martes, 20 de marzo de 2012

Primer paso: Aprender C++

De cara a desarrollar nela, la primera decisión fue elegir el lenguaje de programación a emplear. En la carrera sólo hemos aprendido Ada95, Java y algo de C y PHP. Java es útil para desarrollar programas multiplataforma, pero las aplicaciones gráficas desarrolladas con Swing se ven extrañas en todos los sistemas operativos. Para evitar este problema, posiblemente la mejor opción sea usar las bibliotecas Qt de Nokia (hay otras, como usar GTK o wxWidgets).

Como lenguaje tenemos Python y C++. Python es un excelente lenguaje, y además fácil de aprender, pero es interpretado, con las ventajas y desventajas que conlleva. C++ es un lenguaje mucho más grande y complicado, pero con enorme peso. Buena parte de las aplicaciones que usamos (desde el navegador a la suite ofimática) están escritas en él. Qt se desarrolló pensando en este lenguaje (aunque también se puede usar con Python), por lo que la mayor parte de la documentación se refiere a él.

En el mercado hay centenares de libros sobre C++, entre los que he seleccionado unos pocos guiándome principalmente por las reseñas de la Association of C and C++ Users (aquí podéis ver algunos de los mejores, en distintos niveles). Los agraciados son:
El primero es muy bueno para gente que no ha programado nunca, en ningún lenguaje. Lógicamente no profundiza demasiado, y algo de programación ya sé, así que lo he desechado.

Los dos últimos son libros larguísimos que cubren todos los aspectos del lenguaje, y C++ es inmenso. Mucho más de lo que necesito.

El segundo usa una biblioteca ad-hoc, lo que no me acaba de convencer. Accelerated C++ es una obra mucho más reconocida, y no utiliza ninguna biblioteca extraña. Eso sí, el título es muy adecuado: avanza a un ritmo frenético, lo que lo hace muy exigente con el lector. De hecho, compré este libro hace un tiempo, y lo he empezado dos o tres veces, sin llegar nunca finalizarlo, a pesar de que mientras tanto he aprendido Java y principios de OOP en la carrera. Además, buena parte del libro se centra en las características de la Standard Template Library, que al programar con Qt no es necesaria, porque se solapan.

Finalmente, me he decantado por A Complete Guide to Programming in C++. Escrito de forma muy clara, creo que podría ser aprovechado incluso por chavales de instituto sin ningún conocimiento de programación. Se dedica a la parte central del lenguaje, sin adentrarse excesivamente en la STL. Y a pesar de su tamaño, es fácilmente digerible.

Así que en los últimos meses me he dedicado aprender C++ con este libro, complementado con otro del que os hablaré el próximo día...

domingo, 18 de marzo de 2012

Presentación del proyecto Nela

Este proyecto consiste en la creación de un entrenador software, con la intención de ayudar al aprendizaje del código Braille a los niños con discapacidad visual.

Usando el teclado del PC como si fuera una máquina Perkins, se irá introduciendo al niño a los puntos del cajetín Braille, los números, letras, sílabas y palabras, siguiendo un orden pedagógicamente adecuado y reforzando las que presenten mayor dificultad.

Una fuente de inspiración es el programa Cantaletras, si bien nela estará centrado en una única tarea (enseñanza del Braille), escalonada en numerosos niveles y haciendo énfasis en la usabilidad.

Además, y gracias a basarse en las bibliotecas Qt de Nokia, confío en conseguir que nela sea multiplataforma y funcione tanto sobre Microsoft Windows como GNU/Linux y Mac OS X.