cleartype y fuentes para programar

Una de las cosas que me disgusta es ver un PC con Windows que tiene las fuentes borrosas. El motivo habitual es que se le ha cambiado la resolución de pantalla a mayor, porque con la resolución óptima las letras son muy pequeñas. Las letras en monitores LCD se ven en condiciones óptimas al máximo de resolución que admiten, y si les cambias la resolución a mayor entonces se ven borrosas. El motivo es que al cambiar la resolución a mayor el pixel no coincide con el tamaño de un punto de resolución y la tarjeta se las apaña a su manera para mostrar las letras de la pantalla con lo que aparecen los llamados dientes de sierra. La solución pasa por usar el sistema de anti-aliasing de Windows y poner fuentes grandes en el sistema. El anti-aliasing en Windows se ajusta mediante un powertoy llamado cleartype tuner. Con esto se consigue tener las letras más grandes y con una mejor calidad que cambiando la resolución de pantalla. En Genbeta explican como usar este powertoy.

En el mundo Mac esto es mucho más fácil. Por defecto el efecto de anti-aliasing – que en algunos sitios se traduce por suavizado o alisado – de fuentes está activado, lo cual desde mi punto de vista es un acierto. En el mundo Windows el 80{480d580d36768405d93963bdd82c570c8132a231e8d2b870ef0b18322d1f72b2} de los usuarios ni saben lo que es el suavizado de fuentes, con lo que pierden la oportunidad de mejorar la visión de su sistema. Otra cosa que llama la atención es la diferente manera en que se aplica el suavizado de fuentes en Windows y Mac. Mi admirado Spolsky habló sobre ello y también se pueden encontrar otros post interesantes sobre el tema como este de CodingHorror.Para mi la personalización del entorno de trabajo es un tema capital, y como paso mucho tiempo con un editor el tema del tipo de letra es fundamental. No es sólo tener el anti-aliasing activado, sino usar una fuente que sea clara y que facilite la lectura del código. A raiz del post de CodingHorror sobre fuentes de letra para programar comencé a usar Consolas y para mi esta fuente es imbatible. La uso tanto en Windows como Mac y para mi es elegante, clara y bonita como ninguna otra fuente que haya usado antes para programar.

libra

A través de Genbeta he conocido Libra, un programa de catalogación personal con una pinta estupenda. Para entendernos es un Cuaderno de Bitácora con una interfaz espectacular. El programa presenta los ejemplares de nuestras colecciones como si los tuvieramos expuestos en una estantería, mostrando las carátulas o las portadas de cada uno de ellos. La introducción de datos se hace de manera automática: el programa lee el código de barras del libros, disco o video y se conecta con Amazon para recuperar los datos del mismo. Además tiene varias opciones para importar/exportar datos, y por si fuera poco es gratuito para uso personal. Una pasada, ¿ verdad ?

La realidad es que Libra es un clon para Windows de Delicious Library. Para los que no lo sepan, Delicious Library es una de las killer app del universo Mac. Es LA aplicación de catalogación personal del mundo Mac, con todos los premios del mundo mundial. Una auténtica pasada de aplicacación que exprime el API de Cocoa como pocas. La versión 2 promete ser ya la repanocha. Y lo mejor de todo es que es una aplicación original, en que los programadores han exprimido al máximo su creatividad para crear una interfaz totalmente rompedora.

Cuando veo una aplicación como Libra, la sensación es agridulce. Por una parte reconozco el mérito del desarrollador, pero por otra parte no me parece nada bien que se clone un programa. Si un programador quiere demostrar su valía debe hacerlo con una aplicación que muestre sus dotes técnicas y que sea original. Spolsky dice que los buenos programadores, aquellos a los que debes contratar, son los que hacen las cosas de manera elegante y son capaces de terminar las cosas. Clonar un programa no me parece nada elegante.

A mi me clonaron un programa y no me sentó nada bien.

autocompletado en FWH

Prologo: Quitando comboboxes – hace seis años.

En el caso de campos que son claves ajenas sobre otras tablas, pienso que se debe combinar la facilidad de la introducción de los datos correctos con la capacidad para dar de alta valores nuevos en la tabla auxiliar de una manera directa, y esto último no se puede hacer con comboboxes. Para ello utilizo una combinación de cuadro de texto donde el usuario escribe el valor del campo, y un botón que muestra un formulario de selección de valores. Si el usuario quiere escribir el valor de la clave ajena lo puede hacer directamente y el programa lo valida sobre la tabla auxiliar. Si el valor no está dado de alta en la tabla auxiliar el programa pregunta si se quiere dar de alta, y en caso afirmativo presenta el formulario de alta de la tabla auxiliar. Si el usuario no quiere escribir el valor, puede usar el botón que muestra el formulario de selección y elegir un valor o darlo de alta.Esta manera de hacer las cosas está bien, pero no es perfecta. Como me han comentado varios usuarios de mis programas, lo correcto sería que funcionase un autocompletado del campo de texto sobre el campo que es clave ajena en el mismo. Teclear los valores cada vez es pesado y lleva a errores si no recuerdas como has dado de alta cada valor. Por otra parte el soltar el teclado para hacer click en el botón y seleccionar el valor es un engorro que te hace perder tiempo, sobre todo si tienes que dar de alta muchos registros.

Fisgoneando por los foros de Fivetech encontré una clase TAutoGet que hace precisamente esto, un autocompletado sobre un array donde previamente se han introducido los valores. Incorporar esta clase a un programa es muy sencillo, basta con cargar los valores de los arrays de autocompletado antes de editar el campo correspondiente. Los resultados son espectaculares. Conforme tecleas las primeras letras del valor, te van apareciendo los valores que coinciden coon ellas. Una vez tienes el valor que quieres, con un tab validas el nombre y saltas al siguiente campo. Es mucho más cómodo que soltar el teclado, hacer click en el botón de al lado y ponerte a buscar el valor que quieres introducir. Pocas veces una clase tan pequeña me ha dado unos resultados tan espectaculares. Pura dinamita.

Para los perezosos de visitar el foro de Fivetech dejo un fichero con la clase TAutoGet completa: código fuente, fichero de preprocesado y un pequeño ejemplo, todo sacado del foro. Tengo ya el autocompletado implementado en Findemes, y estará disponible en la próxima versión que vamos a publicar el breve. Ahora estoy pensando en si el autocompletado irá en la edición gratuita o unicamente en la registrada, pero eso es otra historia.

msgbox a la windows vista

En mis programas tengo los mensajes del sistema personalizados. De esta manera controlo que mis programas siempre muestren los típicos mensajes de confirmación, información, alerta y parada de la misma manera en todas las versiones de Windows. También uso mis propios iconos para los mensajes, sacados de las colecciones de iconexperience que uso también en mis programas. De esta manera consigo uniformidad en los programas.

En Windows Vista los mensajes del sistema presentan un aspecto distinto a las anteriores versiones de Windows. Además de los iconos característicos de la nueva versión de Windows, el formulario está visualmente dividido en dos zonas, la de arriba es blanca y contiene el icono y el texto del mensaje, mientras que la parte de abajo es del color habitual del formulario y contiene el botón o botones del mismo.Con FWH es fácil hacer un formulario de estas características usando el control Pages. No hay más que definir el formulario con un control pages donde va la zona blanca y luego crear otro formulario que se solapará encima del anterior. La definición del formulario principal en el fichero RC es de la siguiente manera:

UT_INFO DIALOG DISCARDABLE 29, 34, 206, 88
STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENU
CAPTION "Cuaderno de Bitácora"
FONT 8, "Ms Sans Serif"
{
  CONTROL "&Aceptar", IDOK, "Button", BS_DEFPUSHBUTTON|WS_TABSTOP, 144, 66, 50, 16
  CONTROL "", 110, "Static", SS_WHITERECT, 0, 0, 206, 60
}

El control que va a contener el control page es el identificado con 110. La definición del formulario que va dentro del control Page del formulario principal es como sigue:

UT_INFO_PAGE DIALOG DISCARDABLE 77, 112, 203, 60
STYLE WS_CHILD|WS_CLIPCHILDREN
FONT 8, "MS Sans Serif"
{
  CONTROL "", 10, "Static", WS_GROUP, 48, 8, 142, 44
  CONTROL "", 111, "TBitmap", 0x00000000, 8, 4, 36, 36
}

El código de la función que muestra el formulario es el siguiente:

FUNCTION msginfo(cText, cCaption)
   LOCAL oDlgInfo, oPage
   LOCAL oBmp

   DEFAULT cCaption := oApp():cAppName+oApp():cVersion

   DEFINE DIALOG oDlgInfo RESOURCE "UT_INFO" TITLE cCaption
   oDlgInfo:oFont  := oApp():oFont

   REDEFINE PAGES oPage ID 110 OF oDlgInfo ;
      DIALOGS "UT_INFO_PAGE"
	oPage:oFont := oApp():oFont

   REDEFINE SAY PROMPT cText ID 10 OF oPage:aDialogs[1]
   REDEFINE BITMAP oBmp ID 111 OF oPage:aDialogs[1] RESOURCE "xpinfo" TRANSPARENT

   REDEFINE BUTTON ID IDOK OF oDlgInfo  ;
      ACTION oDlgInfo:End()

   ACTIVATE DIALOG oDlgInfo ;
      ON INIT oDlgInfo:Center( oApp():oWndMain )

RETURN Nil

con lo que conseguimos un formulario como el siguiente:

escritorio mac – octubre 2007

Cada día voy pasando más tiempo con OS X. Siempre he tenido costumbre de personalizar el escritorio y en mac no iba a ser menos. Sigo con la costumbre de tener un escritorio organizado con carpetas, dentro de las cuales tengo el acceso directo a los programas. Se que es una costumbre muy Windows, pero de momento la cosa está así. No me gustan los dock que van de punta a punta de escritorio y prefiero tenerlo despejadito, unicamente con los programas que uso habitualmente. Quiero probar QuickSilver en cuanto tenga un poco de tiempo, y si me apaño bien con el programa quitaré las carpetas del escritorio.

Este es mi escritorio:

escritorio mac octubre 2007

El fondo de escritorio es de hicksdesign y he cambiado los iconos del sistema por los iconos agua de David Lanham, usando la aplicación gratuita LiteIcon. Por cierto, la captura de escritorio está retocada con Pixelmator, un programa de retoque gráfico que tiene una pinta estupenda y que estoy probando.

¿ Y de programar ? Pues la cosa anda revuelta, así que lo contaré cuando esté todo un poco mas tranquilo.

más iconos y un programa

Una de las cosas que debe tener cualquier programador es una carpeta llena de iconos para sus programas. Como ya dije uso los de iconexperience. Hace como un par de meses pasé por su sitio buscando iconos para una nueva aplicación que estoy preparando y me encontré con la versión 2.0 de sus colecciones, que añade un montón de iconos a los que ya había. Y lo mejor de todo es que la actualización a la versión 2.0 de las colecciones es gratuita para los usuarios que hayan hecho el registro después de Julio de 2005, como es mi caso. Así que de gratis me he llevado un montón de nuevos iconos.

Un sitio donde podemos encontrar iconos gratis es famfamfam. Sus silk-icons son de tamaño 16*16px y son estupendos para usar en task-box como las que uso en mis programas. La licencia de estos iconos es la CC-Atribución lo que nos permite usar en nuestros programas siempre que reconozcamos su autoría.

Y si lo que quieres es crearte tus iconos o retocar uno existente puedes usar un programa freeware llamado IcoFX que no tiene nada que envidiar a ningún programa comercial.

el menú de apagado de Vista

Internet tiene cosas impagables, como la reciente polémica sobre el menú de apagado del inminente Windows Vista.

La cosa comenzó con un artículo de Spolsky criticando la usabilidad del menú en cuestión. Al par de días apareció una traducción del artículo al castellano, por si la cosa no quedaba clara.

La cosa no acaba ahí, pues a los pocos días el autor del menú explicaba los motivos del desaguisado en otro post, que también ha sido traducido.

La cosa tiene su miga. Mientras que los seguidores de las ventanas esperan como agua de mayo la salida e implanteación de Vista, cada vez hay más gente crítica con la manera de hacer las cosas de esta empresa. Y sobre todo, hay alternativas. Recuerdo que hace cosa de un año, comentaba con un amigo la jugada de Apple de usar procesadores de intel. La discusión era sobre si la intención de Mac era que los usuarios de PC se pasaran a Mac o si por el contrario querrían vender OSX a los usuarios de PC. Ahora creo que hay una tercera via, que los usuarios de PC y Windows se pasen a Mac y OSX. Al menos será más fácil apagar la máquina.

guía de diseño de formularios

Los lectores de este blog saben de mi insistencia en cuidar los detalles a la hora de diseñar el interfaz de una aplicación. No basta con saber dónde hay que poner los botones, usar unos bonitos iconos o tooltips de balón.

El asunto más importante a la hora de diseñar el interfaz de una aplicación es el diseño de formularios. Situar controles en un formulario no consiste en arrastrarlos desde un editor de recursos y soltarlos donde caigan. Hay que situarlos correctamente, vigilando las distancias entre controles y las alineaciones entre ellos. No está de más tener una guía de formularios que marque como hay que hacer las cosas. En alanit los formularios se dibujan de esta manera: