el Puchero en Personal Computer & Internet

En el número 37 de la revista Personal Computer & Internet aparece un especial sobre software gratuito en el que han incluido el Puchero. La reseña del programa es la que aparece a continuación:

20060126.jpg

Realmente es un honor compartir páginas con programas como Gimp, Firefox, Google Talk y algunos otros de los programas más conocidos del mundo mundial, como la Agenda Arcadina de José Alberto Hernándis que también aparece entre los programas reseñados.

actualizaciones de programas

La semana pasada terminamos las actualizaciones de los programas y la web y subimos las nuevas versiones de Cuaderno de Bitácora y el Puchero a la web de alanit. Las principales novedades que traen las versiones son los nuevos bitmaps de los programas, que son los de iconexperience, y el tema de las altas dinámicas en tablas auxiliares. Además hemos corregido un montón de pequeños bugs y cosas que no estaban del todo bien hechas.

Pero quiza el cambio más importante, y lo que más nos ha costado decidir ha sido el cambio en el modo de distribución. A partir de estas versiones los programas de alanit se presentan en dos ediciones:

  • Una edición gratuita sin límite de registros a introducir ni límite de tiempo de uso, pero con algunas limitaciones en funcionalidad.
  • Una edición registrada con todas las funcionalidades del programa. El precio de esta edición es de 15 euros e incluye un año de actualizaciones gratuitas

¿ Que intentamos con este cambio de modo de vender los programas ? Pues principalmente ampliar el número de posibles usuarios en base a ofrecer ediciones gratuitas que haga más atractivo descargar el programa. Y por otra parte al bajar el precio lo dejamos a un precio que esperamos que los interesados en los programas ni se planteen buscar versiones P-) ni similares. Al ofrecer un año de actualizaciones gratuitas pensamos que damos un empujón más al interesado a decidir por el registro del programa al darle un margen grande para que su pago se amortice.

Los resultados de todos estos cambios son una incognita, pero el cambio de modo de licenciar los programas es firme y no hay vuelta atrás. Ahora nuestros pasos se encaminan a internacionalizar los programas y tener listas versiones en inglés en breve y a promocionar al máximo las versiones disponibles.

El primero en dar el salto de la i18n y el conejillo de indias para esto ha sido Colossus que ya funciona en español e inglés. Faltra traducir la ayuda, pero tampoco es mucha tela comparado con lo que puede ser traducir la ayuda de los otros programas.

Sobre la promoción de los programas queremos disparar a todo lo que tenga relación con nuestros programas desde sitios de descarga de programas hasta sitios web sobre cocina. Y dedicarle tiempo a esto, que es en lo que siempre pinchamos. Estamos convencidos de que vamos por el buen camino, que los programas tienen buen nivel pero hay que darlos a conocer más. De momento nos hemos llevado una alegría: el Puchero fue portada durante un par de dias en UptoDown y en una semana llevamos casi mil descargas de la edición gratuita.

montar un tree desde una DBF con FWH

En el Puchero se usa una clasificación arborescente denominada clasificación francesa y para jugar con ella la monto en un tree. Como he recibido varios correos preguntando la manera de montar el tree desde la dbf, aqui lo explico un poco.

Lo primero es montar una estructura de datos que permita ser representando en forma de arbol. Un arbol no es más que una jerarquía con varios niveles, y lo que tengo en mi dbf son varios campos -hasta 5 – para indicar en que rama del arbol estoy. Los campos se llaman FrN1, FrN2, FrN3, FrN4 y Frn5 de manera que el arbol lo veo así:

(1,0,0,0,0)
···(1,1,0,0,0)
······(1,1,1,0,0)
······(1,1,2,0,0)
···(1,2,0,0,0)

Una vez esto claro el arbol se monta así:

FUNCTION FrTreeLoad( oTree )
LOCAL oDatabase
LOCAL nStep
LOCAL oLink
LOCAL oLink1, oLink2, oLink3, oLink4, oLink5
LOCAL N1	:= 0
LOCAL N2	:= 0
LOCAL N3	:= 0
LOCAL N4	:= 0
oLink := oTree:GetRoot()
SELECT FR
FR->(DbGoTop())
DO WHILE ! FR->(EOF())
···IF FR->FrN2 == 0
······oLink1 := oLink:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink1:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSEIF FR->FrN3 == 0
······oLink2 := olink1:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink2:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSEIF FR->FrN4 == 0
······oLink3 := olink2:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink3:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSEIF FR->FrN5 == 0
······oLink4 := olink3:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink4:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSE
······oLink5:= oLink4:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink5:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
ENDIF
FR->(DbSkip())
ENDDO
oTree:UpdateTV()
oTree:SetFocus()
RETURN NIL

Lo que hago es recorrer el DBF que tengo ordenado por la concatenación de los 5 campos y cuando cambio de nivel añado una rama al nivel inferior.

El resultado:

20050511.jpg

nueva imagen de el Puchero

En el lanzamiento de las nuevas versiones de los programas estamos cuidando a tope los detalles. Una cosa que siempre me ha llamado mucho la atención de los programas es el icono. Estoy harto de ver programas buenos o muy buenos con un icono penoso y es un auténtico placer observar iconos bien hechos, como los de Firefox y Thunderbird. Un icono bonito es la guinda de un programa bien hecho.

Como no nos gustaban lo suficiente los iconos de el Puchero y Cuaderno de Bitácora que somos capaces de hacer decidimos encargarlos a Jono. Jaime y yo nos quedamos a cuadritos cuando nos envió su propuesta. La idea es la misma: un tenedor y una cuchara cruzados… pero bien hecho.

20041013.jpg

estoy aquí…

El verano está siendo largo en muchos sentidos. Desde que nos fuimos a vivir al campo una de mis mayores preocupaciones es la conexión a internet. Parece que a Telefónica no le sale rentable instalar lineas de teléfono fuera de los cascos urbanos de las localidades y las compañías eléctricas no acaban de despegar con el acceso por red eléctrica. El resultado es que ni tengo teléfono ni conexión a internet, y no se cuando lo voy a tener. Un profesor mio decía siempre que hambre que espera comer no es hambre, pero yo no se cuando comeré.

La versión 4 de el Puchero está casi lista. Vamos por la 10ª beta y falta afinar unas cosas de la clasificación francesa, pero creo que este mes tendré ya una beta pública. Jaime también va bien con la versión 6 de Cuaderno de Bitácora y creo que para mediados de octubre tengamos en la calle las nuevas versiones. Esto de no tener internet está bien porque no te despistas y cuando te sientas a programar programas y no haces el indio, pero llevo un lio de narices con el correo, que leo cuando puedo y contesto cuando me dejan.

20040915b.jpg

Dos cosas a destacar: en Noviembre reunión de Olivares2000, y si me dejan haré una ponencia sobre los primeros capítulos del libro ‘The pragmatic programmer’.

La otra: T-Gtk. Rafa Carmona, The Full, está construyendo una GUI sobre GTK+ para Harbour, usando además GCC. Quiero subirme a este tren, ponerme las pilas y colaborar. Creo que usar GTK+ es una excelente idea, y creo que la única de poder desarrollar para Windows y Linux al mismo tiempo, algo sencillamente genial. Espero que en la reunión de GO2000 Rafa nos cuente cosas de su criatura.

el Puchero 4.0

Estoy modificando el Puchero, mi programa de gestión de recetas de cocina. Está quedando bastante bien.

20040331.jpg

He vuelto a usar xHarbour. En las últimas semanas han quedado resueltos muchos de los problemas que aparecian al usar índices CDX y en los foros se habla de que es inminente el lanzamiento de la primera beta de la versión 1.0 del compilador.

Además uso lo siguiente:

Tengo casi terminada una versión equivalente a la 3.6 pero a 32 bits. A partir de ahora queda añadir las mejoras de esta versión. He tenido que cambiar 2 veces de compilador: de xHarbour a C3 y vuelta a xHarbour y esto me ha retrasado bastante la estimación del proyecto. Ahora he conseguido tener controlado y estabilizado el entorno de desarrollo y espero avanzar más rápido.

integridad referencial en claves ajenas

En la nueva versión de el Puchero he decidido tratar con rigor el tema de las claves ajenas y aplicar la regla de integridad referencial para claves ajenas. Estas son las reglas que voy a seguir:

  • Regla de los nulos: permitir valores nulos – en mi casi en blanco – en los campos que son clave ajena.
  • Regla de borrado: al borrar la clave primaria los registros que contengan ese valor de clave ajena se pondrán a nulo.
  • Regla de modificación: al modificar un valor de clave primaria la modificación se propaga a la clave ajena.

Una cosa que me parece especialmente mal resuelta es la aplicación de la restricción de modificación de la clave principal. El usuario puede haber cometido un error de tipografia, por ejemplo, y tener que modificar uno a uno los registros que contienen la clave ajena antes de permitir el borrado de la clave principal. Menudo latazo.