david antony clark – australia beyond the dreamtime

dac-australia.jpg
David Antony Clark
Australia beyond the dreamtime

Anuncios

setup.exe

Esta semana estaba buscando una determinada utilidad. Busque en Google y entré en las web de los dos programas que en principio me parecieron más adecuados. Al ir a bajarme los dos programas para probarlos me pasó algo muy chocante: los dos ficheros de instalación de los programas se llamaban setup.exe. Aplicando una de las máximas canafiveanas podriamos decir que parece una tontería pero realmente es una estupidez.

¿ Cómo se le ocurre a alguien ponerle setup.exe a un fichero de instalación ? Está claro que es un setup, pero ¿ de qué programa ? ¿ Qué pasa si el usuario se baja la instalación al disco y no sabe luego donde la ha dejado ? ¿ Qué busca ? ¿ Cual de todos los setup.exe que tiene por el disco es el bueno ?

Quiza el programador piense que su programa es el único programa que el usuario va a descargar y por eso no tiene reparos en llamarle setup.exe, pero la verdad es que no me parece una buena idea.

Detalles, detalles. Son los que marcan la diferencia.

acerca de avemundi

Hace unos dias un amigo me disparó a quemarropa en el messenger: ¿ que significa avemundi ? ¿ es un tipo de pájaro ? ¿ que tiene que ver con la programación ? Pues no, no es un pájaro ni es un avión, pero todo tiene su explicación.

En la muchos libros y manuales de programación el primer programa que se hace es mostrar por pantalla ‘Hola mundo’ que en latín es… ave mundi. ¿ Y de donde me viene a mi esta vena de latín ? Pues la verdad es que sé poco latín, casi nada. Recuerdo haber estudiado latín en el instituto, pero poco más. Quiza la culpa de la fijación por el latín la tuvo Manu Roibal y su librería Fast.lib.

Seguro que los viejos clipperos recuerdan Fast.lib, una de las mejores librerías de propósito general desarrolladas para Clipper. Todos los ejemplos de Fast.lib venian acompañadas de una frasecita que me trajo loco muchos años, algo así como de omni re scibili et quibuscam aliis. Estuve años preguntando a todo el que pensaba que podía saber latín por la dichosa frasecita y hace poco se me ocurrió buscar en internet. La respuesta, extraida de una página del CSIC, fue esta:

El humanista Pico della Mirandola (1463-1494) presumía de poder disertar “de omni re scibili”, es decir, “acerca de toda materia conocible”. Alguien, con sentido del humor, añadió a esta inmodesta declaración un “et quibusdam aliis”, “y de algunas cosas más”, de forma que la frase “de omni re scibili et quibusdam aliis” pasó a la historia para criticar humorísticamente a quienes creen saberlo todo o poder hablar de todo.

Asi que decidí que la descripción de avemundi dejase de ser un blog sobre desarrollo de software por de software re scibili et quibusdam aliis.

Toma naming, hundredmonkeys.

i18n en xharbour – 2

Estoy probando la i18n en xHarbour para aplicarlo en Colossus y es sumamente fácil de utilizar. En la documentación sobre la i18n hay una errata que me ha hecho atascarme un rato: donde dice…

I18N_SetPath( "c:MyPathDifferent" )
I18N_SetLanguage( cLang )

debe decir

HB_ I18NSetPath( "c:MyPathDifferent" )
HB_I18NSetLanguage( cLang )

Pero lo más impresionante de todo es que HbDict recuerda que cadenas has traducido ya del idioma base aunque regeneres el fichero de idioma.

Impresionante trabajo el de Giancarlo Niccolai.

colossus 3.0.i RC 1

Ya está casi lista la versión a 32 bits de mi programa de gestión de contraseñas. Está hecho con xHarbour + Fivewin y es mi primer programa de 32 bits.

colossus.gif

Que nadie se asuste, que el programa funciona bajo Windows pero esta captura es de mi escritorio Gorilla, ya que captura los temas de XP.

Mi anterior programa de gestión de contraseñas se llamaba Guardian, pero decidí cambiar el nombre al comprobar que existía otro programa de gestión de contraseñas con el mismo nombre y además era gratuito.

¿ Por qué Colossus ? Jaime Irurzun me lo preguntaba en un correo tras mandarle una beta:

Hola Jose Luís,

Mira esto es una curiosidad… Me he comprado un libro de introducción a la programación, y al principio habla un poco de la historia de la informática. El caso es que al leer un párrafo me he acordado de tu programa, Colossus.

“El inglés Alan Turing construyó el Colossus (distintas versiones entre 1941 y 1944) para descifrar el código secreto alemán Enigma, que usaban en las comunicaciones con las tropas,incluidos los barcos y submarinos en el Atlántico. Se trataba de un proyecto de tan alto secreto que el Colossus fue destruido después de la guerra, y se prohibió hablar del proyecto a todos los que participaron en él.”

Por el nombre y la relación con descifrar código secreto (contraseñas), he pensado que igual es por eso el nombre, ¿es así?

Pues si, ese es el motivo del nombre del programa.

Como primicia de los lectores del blog os dejo la demo de la RC 1. Espero vuestras sugerencias.

alanit colossus 3.0.i RC1 – fichero ZIP sin instalador – 789KB

i18n en xHarbour

Una nueva característica que ha pasado casi desapercibida en la versión 0.81 de xHarbour es la de internacionalización de la aplicación. La internacionalización – i18n porque entre la i y la n hay 18 letras – de una aplicación supone tener herramientas automáticas para traducir cualquier literal que muestre la aplicación en las distintas lenguas a las que se la quiera traducir. Muchos lenguajes modernos incorporan herramientas de i18n, que son muy apreciadas por los programadores de un mundo cada vez más globalizado.

Si no tenemos herramientas de i18n podemos hacer la traducción de los mensajes de varias maneras:

  • incrustando la i18n en el código, es decir meter todos los literales en el código y mostrando unos u otros en función de una variable. Esto es una auténtica burrada, con perdón.
  • almacenando los literales en un RC. En este caso lo normal es tener un RC para cada lengua a la que traduzcamos nuestra aplicación, aunque también podremos tenerlos juntos en el mismo RC y elegir cual mostrar. En cualquier caso en el programa tendremos que recuperar la cadena del RC para mostrarla. En el caso de tener que mostrar una etiqueta haremos algo como esto:
    REDEFINE SAY PROMPT LoadString(GetResources(),1164) ID 20 OF oDlg
    REDEFINE SAY PROMPT LoadString(GetResources(),1163) ID 21 OF Odlg
    

    ¿ Problema ? Que codificamos a ciegas, pues ¿ cual es la cadena 1164 ? Tenemos que estar continuamente pasando del editor de código al editor de recursos para saber que estamos diciendo al usuario y además llevar cuidado de no repetir cadenas. Un rollo.

Ahora en xHarbour 0.81 cada cadena a i18n la pasamos como parametro a una función que se llama precisamente i18n(), con lo que tenemos algo asi:

REDEFINE SAY PROMPT i18n("Introduzca la materia") ID 20 OF oDlg
REDEFINE SAY PROMPT i18n("Materia:")              ID 21 OF Odlg</p>

El lenguaje nos proporciona herramientas para generar un diccionario de terminos a traducir y realizar la traducción de los mismos. Una vez traducido el diccionario, lo único que tenemos que hacer desde nuestra aplicación es seleccionar el lenguaje en que mostraremos los mensajes.

xHarbour va pareciendo cada vez más un lenguaje moderno.