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.

despliegue

El despliegue de software – deployment en inglés – es el conjunto de actividades que permiten que un determinado software se pueda usar en cualquier máquina. Muchos programadores no saben lo que es el despliegue y otros muchos confunden el despliegue con preparar un paquete de instalación de su software mediante programas como InnoSetup o similares. También existe determinado tipo de software, de acuerdo a los cinco mundos de Spolsky, que no necesita despliegue. Los programadores que hacen software interno o empotrado rara vez tendrán que preocuparse por el despliegue de su aplicación. Pero si alguna vez lo tienen que hacer, casi seguro que se meterán en un buen lio.El despliegue no comienza cuando se termina el programa, sino que debe comenzar precisamente con el comienzo del mismo. Una de las partes que más dolores de cabeza dan en el despliegue es la parte de creación de bases de datos o estructuras de datos del programa. Para que el despligue de una aplicación sea correcto debe incluir procedimientos automáticos de creación de la base de datos que vaya a utilizar, y esto debe planificarse cuidadosamente desde el inicio de la aplicación.

Hace poco hablaba con un amigo que trabaja en una empresa pública. Resulta que han hecho una aplicación interna muy buena y se la han premiado como una mejora de los procedimientos administrativos. Esto ha hecho que se conozca la exstencia de la aplicación y se la pidan de otras organizaciones similares, y ahí ha empezado su calvario. Ahora están desmontando la aplicación, pues tiene un fuerte acoplamiento con otras aplicaciones internas y no tiene sistema automático de creación de las bases de datos que utiliza. El problema de todo esto es que nunca pensaron que su aplicación iba a salir de su organismo, y no pensaron jamas en términos de despliegue. Moraleja: no importa que tipo de software hagas, piensa siempre que algún dia querrás distribuir tu aplicación. Piensa en terminos de despliegue.

Con el despliegue debes asegurarte de que tu programa va a funcionar en cualquier ordenador que cumpla unos requisitos mínimos de máquina y de sistema operativo. La creación de directorios, copia de archivos, registro de componentes, activación del programa y creación de enlaces en el menú inicio o en el escritorio debe ser completamente transparente al usuario. No hay nada más frustrante que descargarte una aplicación y tener que hacer tu los ajustes a mano para que funcione el programa y que después de un buen rato de pelearte con la aplicación no consigas hacerla funcionar. A mi me ha pasado más de una vez y se te queda muy mal sabor de boca. Si quieres evitarte problemas de despliegue tienes que intentar que tu aplicación sea autocontenida en la medida de lo posible, y que no tengas que recurrir a instalar otros componentes de terceros y menos aun que estos componentes de terceros se tengan que configurar a mano.En alanit todos los programas están hechos pensando en el despliegue. Cuando un programa arranca lo primero que hace es comprobar que existen todos los ficheros de datos necesarios para funcionar, y si alguno no existe se crea automáticamente. La instalación de nuevas versiones es no agresiva, si existen ficheros de datos del usuario el programa de instalación no copia los ficheros de datos que el programa trae por defecto. Y por supuesto, ningún paquete de instalación no se llama setup.exe.

negresbetanics.com

En las últimas semanas he estado haciendo una web para mi comparsa de moros y cristianos, los Negres Betànics. Es una comparsa de solera en las fiestas de Novelda, y una de sus características más importantes es que todas las filás o escuadras desfilamos con trajes de guerrero y pintados de negros. Estas pinturas aportan un plus de vistosidad a los desfiles y siempre somos una de las comparsas más aplaudidas en estos actos.Cuando planteamos hacer una web, yo me negué a hacer una web clásica – con xhtml/css y picado a mano para entendernos – y expuse que la mejor manera era hacerla con un gestor de contenidos, como si fuera un blog de tal manera que cada filá pudiera publicar lo que quisiera dentro de una normas.El sitio está hecho con WordPress y usa como base el tema BlueBox. A la hora de categorizar las entradas, opté por poner enlaces fijos a las distintas categorías, de tal manera que la barra lateral tiene una estructura fija separada en secciones. Además he usado los siguientes plugins de WP:

Además he hecho una modificación sobre el tema de WP para que la imagen de cabecera de la web vaya cambiando cada vez que se carga una página. Esto le da mucha vida a la web, ya que cada vez que haces un click ves una imagen distinta en el encabezado. La web tiene este aspecto:

Por cierto, mi filá se llama Viidones.

backspaceware

Al instalar la última actualización de Paint.NET me llamó poderosamente la atención el siguiente mensaje que apareció en el formulario de instalación del programa.

No soy seguidor del blog del creador de Paint.NET, pero si lo he leido alguna vez y recordaba haber leido por encima algo sobre una copia del programa. Revisando el blog encontré la entrada en cuestión y la lei con mas detenimiento. Resulta que un programador había cogido el código fuente de Paint.NET, le había quitado la información relativa al autor original, había añadido una serie de plugins al programa y había creado un nuevo instalador. Pero con el detalle de borrar la información relativa a los créditos de los autores del programa y atribuyéndose la autoría del mismo. El programa era el original, y los plugins sacados de los foros del programa. Esta nueva manera de hacer software es bautizada por el programador de Paint.NET como backspaceware, software hecho borrando lo que no interesa de un código disponible.El caso es que el reempaqueteador es bien conocido por esas prácticas, y ya ha hecho lo mismo con otros programas. Para mas guasa, el nombre dado al programa reempaquetado fue Creative Paint, lo cual refleja el espiritu creativo del sujeto este.En el debate que acompaña al post se pueden leer opiniones para todos los gustos. Desde los que acusan de ladrón al reempaquetador, hasta los que dicen que de acuerdo a la licencia de Paint.NET – que parece ser una licencia MIT – se puede derivar cualquier trabajo sin tener que reconocer el trabajo del desarrollador original. Ahí es nada.Tras el revuelo armado con el tema, el desarrollador de Paint.NET ha conseguido que el programa reempaquetado desaparezca de la mayoría de sitios de descargas de software, y ha cambiado la licencia de Paint.NET a una CreativeCommons-By-Nd que obliga a mantener la atribución del software a su autor original y prohibe hacer productos derivados del programa.

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:

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

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:

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

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

1FUNCTION msginfo(cText, cCaption)
2   LOCAL oDlgInfo, oPage
3   LOCAL oBmp
4 
5   DEFAULT cCaption := oApp():cAppName+oApp():cVersion
6 
7   DEFINE DIALOG oDlgInfo RESOURCE "UT_INFO" TITLE cCaption
8   oDlgInfo:oFont  := oApp():oFont
9 
10   REDEFINE PAGES oPage ID 110 OF oDlgInfo ;
11      DIALOGS "UT_INFO_PAGE"
12    oPage:oFont := oApp():oFont
13 
14   REDEFINE SAY PROMPT cText ID 10 OF oPage:aDialogs[1]
15   REDEFINE BITMAP oBmp ID 111 OF oPage:aDialogs[1] RESOURCE "xpinfo" TRANSPARENT
16 
17   REDEFINE BUTTON ID IDOK OF oDlgInfo  ;
18      ACTION oDlgInfo:End()
19 
20   ACTIVATE DIALOG oDlgInfo ;
21      ON INIT oDlgInfo:Center( oApp():oWndMain )
22 
23RETURN Nil

con lo que conseguimos un formulario como el siguiente:

la cocina de Maetiare

Cuando te dedicas a vender software por internet te pueden pasar cosas curiosas. Una de ellas puede ser conocer personas que se vuelven usuarios entusiastas de tus programas y te animan constantemente a mejorarlo y a introducir nuevas funcionalidades a los mismos. Esto fue lo que me pasó con Esther P.S. y mi programa el Puchero. Esther hizo que el Puchero evolucionara de una manera tremenda gracias a su empeño y tenacidad en conseguir un programa mejor que el que utilizaba por entonces. El salto de calidad que dió el programa con la versión 4 fue en gran parte culpa suya, ya que participó activamente en su desarrollo junto con otros usuarios aportando ideas y testeando el programa.Esther tiene desde hace tiempo un blog sobre cocina, donde publica muchas de sus recetas. El blog tiene por nombre La cocina de Maetiare su nick en algunos de los foros de cocina en que participa. Además de publicar estupendas explicaciones de las recetas con imágenes incluidas en su blog, Esther tiene la consideración de publicar las mismas recetas en formato de el Puchero en el foro de cocina que tenemos en la web de alanit, de manera que la incorporación de sus recetas al programa es cosa de un click.

tudumo

De nuevo gracias a el canasto he descubierto una nueva aplicación GTD llamada Tudumo. La aplicación es un gestor de tareas o to-do list muy sencilla de utilizar, en la linea de TaskPaper pero esta vez para Windows. El programa permite anotar tareas pendientes por proyectos, marcando su importancia de acuerdo a las categorias GTD – siguiente acción, acción a realizar, retenido, realizado, en espera, algún día – y añadiendo tags que vienen a simular los contextos de GTD.Tudumo es un software de una elegancia fuera de lo normal. El concepto de usabilidad que maneja su desarrollador está muy por encima de lo habitual, y viendo lo bien hecho que está creo que a cualquier programador se le quitan las ganas de ponerse a hacer un programa de ese tipo. Ahora mismo el programa está en fase beta, y el autor tiene intención de realizar su internacionalización una vez terminado. La web del programa cuenta también con un blog donde el autor va contando lo que va haciendo y también explica aspectos de funcionamiento del programa. Un programa realmente impresionante.

sobre comentarios y tipos de programadores

En variable not found han publicado un par de artículos muy interesantes sobre comentarios, titulados Problemas al comentar tu codigo fuente y 13 consejos para comentar tu código.

En Coding Horror hay un artículo sobre programadores muy interesante titulado the two types of programmers del que se hacen eco en Picando Código y en La muchachada informática.

reflexiones sobre la manera de limitar el software

Hace como dos años, decidimos cambiar la estrategia de negocio y ofrecer ediciones gratuitas de nuestros programas. El año 2005 fue el peor en cuanto a ventas de los programas y decidimos ofrecer versiones de los programas sin límite de registros ni de tiempo de uso, pero limitando la funcionalidad de seleccionar claves de tablas auxiliares. Cuando se intenta usar esta funcionalidad los programas muestran una ventana diciendo que esa funcionalidad está disponible unicamente en la edición registrada, muestra un enlace a la página con la comparativa de ediciones y otro a la página de compra del programa. De esta manera pensabamos llamar más la atención al ofrecer software gratis al tiempo que incentivamos el registro del mismo. Pensabamos que la edición gratuita era plenamente funcional, con la pega que todos los datos de claves ajenas había que meterlas a mano y que era mejor manera de ofrecer el software que limitar las versiones a un determinado número de dias o de registros.

La semana recibimos un correo de un señor muy enfadado que decía que se había descargado la edición gratuita de Azeta y que no había podido evaluarlo porque al tratar de usarlo el programa le remitía constantemente a la compra del programa. El señor decía sentirse engañado y que hubiese preferido una versión limitada en tiempo o registros a introducir. Aparte de los calificativos que nos propinaba, nos decía de todo de una manera muy educada, correos como ese son los que te mueven a reflexionar sobre si estás haciendo las cosas bien.

Por los correos que recibimos, sabemos que hay mucha gente que usa las ediciones gratuitas con total normalidad, de tal manera que ni se plantean pagar por las ediciones registradas. En ese sentido pensamos que la estrategia es buena pues da a conocer el programa y la persona que no la va a registrar, porque hay personas que nunca registran un software por muy util o barato que sea, lo puede usar sin más. Nosotros usamos mucho software gratuito, que a veces son ediciones recortadas de versiones más potentes, y en este sentido pensamos que publicando ediciones gratuitas de nuestros programas devolvemos lo que recibimos.La alternativa sería utilizar versiones recortadas en número de registros o en tiempo de uso, pero pensamos que estas versiones presentan varios inconvenientes. La primera es que frena a su utilización por los potenciales usuarios, que saben que la versión va a caducar. La segunda es que los programas limitados de esta manera son muy más fáciles de crackear. No es que pensamos que hay muchos crackers interesados en nuestros programas, pero ver versiones anteriores de nuestros programas circulando sin control no fue algo bonito.Por todo esto pensamos seguir ofreciendo ediciones gratuitas de la manera en que lo estamos haciendo. Con anterioridad ofrecimos ediciones limitadas en el número de registros a introducir, y pensamos que acertamos con el cambio a las ediciones gratuitas.

alanit
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.